Re: [PATCH] staging: dwc2: set up all module params

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 27.11.2013, at 07:47, Gordon Hollingworth wrote:
> In general it should be possible to schedule multiple split
> transactions to a TT but they _must_ be completed on time or the hub
> will drop the transactions on the floor...  Unfortunately because of
> the interrupt latency issues it cannot be guaranteed without the FIQ

Maybe a bit of outside of the box thinking with limited knowledge of
the finer details of USB:
If the "delay" we are allowed to have is "somewhat" deterministic,
then maybe use the ARM DMA to configure the USB registers after a
certain delay.

My experiments with a DMA only pipelined SPI driver shows that it is
possible:
* to schedule delays only in DMA (with an accuracy of about 2%)
  (note that this has some impact on available Memory bandwidth)
* to configure VC registers via DMA - I am not sure if this also 
  applies to the USB registers that are coming from an external IP.

That way one could configure a max delay after which the DMA would
schedule the pending USB-transfer itself.
The only thing one would need to make sure is that there is no 
concurrent access to the registers between code and DMA.

Another approach could be looking if we can get that "scheduling"
part of interrupts into the VideoCore CPU, which runs RTOS.
So essentially creating an interrupt engine in RTOS - even if it
would only start a pre-configured DMA transfer.
(but that would mean convincing lots of people to get this into 
firmware...)

Ciao,
	Martin
_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux