[patch 2/5] Staging: vme: add VME userspace driver
martyn.welch at gefanuc.com
Tue Aug 11 05:46:53 PDT 2009
Emilio G. Cota wrote:
> Martyn Welch wrote:
>> suggest if you want something more complex that allows the user to just
>> pick a location/size and not worry about windows at all
> That's exactly the whole point. I think each bridge should manage
> its resources; putting this on the upper layer would mean the
> layer should have a mechanism of 'discovering' what the bridge
> can/can't do. Anyway this could be revisited later.
> I'm preparing a patch for this.
I disagree. The bridge drivers should register their resources with the
core. The core, or a layer above it, can control how those resources are
used. This moves the complexity you want for managing the windows to a
level that will work on all underlying drivers rather than having to be
written explicitly for each one. The mechanism I have provided does this
>>> - Most accesses are 32-bit accesses. Treating all of them
>>> as 64-bit accesses would decrease performance for most of
>>> them--which happen to be 32-bit.
>> I'm not - I'm storing them as 64-bit values, which they are, in the
>> structures used in *software*. These are then split *when* a write to
>> the hardware registers is required. Similarly, when the registers are
>> occasionally read they are combined and stored as a 64-bit value. This
>> simplifies all *software* checking and manipulation. By storing these as
>> 2 32-bit values every driver that uses the VME core will need to convert
>> pci addresses, vme addresses and counts to 2 32-bit values. That is
> I agree with you on that's painful for doing 64-bit accesses.
> However I'm still not convinced on the performance side (I mean
> software), since most of the time the upper 32bits will be empty.
> Will have a look though.
Regardless of the contents of the upper 32 bits, they will need to be
checked. For example when ensuring a window offset and size fit within a
given address space. To do this the bound needs to be calculated.
To do this with 2 32-bit values. add the lower window offset and size,
which could lead to an over-flow of the lower 32-bit value, which needs
to be added to the upper 32-bit value, which is the sum of the upper
window offset and size. Then potentially check both the upper and lower
values (thinking of 16-bit address range here) to ensure they are below
the maximum address for the address range.
Compared to an addition of the window offset and size and a comparison
to the maximum address for the address range when using one 64-bit value.
Clearly neither of the above basic outlines check that the combination
has wrapped over 64 bits, but this would affect both equally.
So, which is more complex?
Martyn Welch MEng MPhil MIET (Principal Software Engineer) T:+44(0)1327322748
GE Fanuc Intelligent Platforms Ltd, |Registered in England and Wales
Tove Valley Business Park, Towcester, |(3828642) at 100 Barbirolli Square,
Northants, NN12 6PF, UK T:+44(0)1327359444 |Manchester,M2 3AB VAT:GB 927559189
More information about the devel