usb: chipidea: add system interface for ttctrl.ttha
authorPeter Chen <peter.chen@nxp.com>
Mon, 1 Feb 2016 06:23:44 +0000 (14:23 +0800)
committerPeter Chen <peter.chen@nxp.com>
Mon, 29 Feb 2016 05:37:51 +0000 (13:37 +0800)
commitaa7381876cf74d77fd48cb9569444f905cdb31c8
tree5038fd051a26d95fcb47137a005caedf3ab59004
parent34d5732dd61f65143098a949fd3dc15af9a112cc
usb: chipidea: add system interface for ttctrl.ttha

In chipidea IP RTL, there is a very limited design for siTD, the detail
like below:
There is no Max Packet Size at siTD, so it uses one constant for both
Max Packet Size for packet and the packet size for the last transaction
when considering schedule.
If the ttctrl.ttha does not match against Hub Address field in siTD,
this constant is 188 bytes, else this constant is 1023 bytes.

If the ttctrl.ttha is non-zero value, RTL will use 188 as this constant,
so it will lose the data if the packet size is larger than 188 bytes, eg,
if we playback a wav which format is 48khz, 16 bits, 2 channels, the
packet size will be 192bytes, but the controller will only send 188 bytes
for this packet, the noise will be heared using USB audio card.
The use case is single transaction, but higher frame rate.

If the ttctr.ttha is zero value, we can send 1023 bytes within one
transaction, but the controller will not accept the coming tranaction
if it considers the schedule time is less than 1023 bytes. So the
limitation is we can't schedule as many as transactions within frame.
If the total bytes is already 256 bytes for previous transactions within
frame, it can't accept another transaction. The use case is multiple
transactions, but less frame rate.

Signed-off-by: Peter Chen <peter.chen@nxp.com>
drivers/usb/chipidea/core.c