[PATCH] slimbus: Linux driver framework for SLIMbus.

Marc Butler marc at plastictigers.com
Mon Jun 4 13:13:44 EDT 2012


On Mon, Jun 04, 2012 at 03:21:06AM -0700, Sagar Dharia wrote:
> > The enumeration slim_ch_proto is incorrect. It declares 2 transport
> > protocols which do not exist in the specification: SLIM_HARD_ISO;
> > SLIM_AUTO_ISO.
> 
> The enums are more SW representation (and not 1-1 mapping). Difference
> between HARD_ISO and AUTO_ISO with example:
> Let's say the root frequency is 24.576MHz. then all 4K family channels
> (sample rate multiple of 4K) can run isochronously, and all 11.025KHz
> channel can run with good efficiency.
> So if a client wants 11.025KHz and is does not want to do flow-control at
> this root frequency, then the client can specify AUTO_ISO to get the next
> available isochronous frequency.

I understand it is not a 1-to-1 mapping. However it *is* used as such:

 wbuf[2] = (u8)((segdist & 0xF00) >> 8) | (slc->prop.prot << 4);

which results in NEXT_DEFINE_CHANNEL messages with an invalid TP
field.

More importantly I think it makes it harder to understand the
framework. The concept of HARD_ISO and AUTO_ISO are extensions, and
should really look like such, say perhaps:

enum {
       SLIM_ISO,
       SLIM_PUSH,
       SLIM_PULL,
       SLIM_LOCKED,
       SLIM_ASYNC_SMPLX,
       SLIM_ASYNC_HALF_DUP,
       SLIM_EXT_SMPLX, 
       SLIM_EXT_HALF_DUP,
       SLIM_AUTO_ISO,
       SLIM_USER_DEF_1 = 14,
       SLIM_USER_DEF_2 = 15,
       /* extensions */
       SLIM_HARD_ISO,
       SLIM_AUTO_ISO
};       

> > b) Similarly to (a) the driver may be probed before the device has
> > been given a logical address (LA). This makes sense in the case of
> > driver that turns on the device (say via gpio) once the bus has
> > booted. However, the driver then needs to sit and poll
> > slim_get_logical_addr() until the logical address.
> This is not the case anymore.
> While taking care of the comments for RFC, I have introduced a completion
> that will be signalled when LA is given to the device. The driver can wait
> on that completion (wait_enum) instead of polling.

Yes, my mistake. The driver wouldn't have to poll if there was another
callback. So I don't see how the completion mechanism is superior: it
forces a synchronous interface to asynchronous events, or the driver
developer has to work around it.

-- 
If you wake up and you're not in pain, you know you're dead.
(Russian Proverb)




More information about the linux-arm-kernel mailing list