History log of /drivers/usb/renesas_usbhs/pipe.c
Revision Date Author Comments
8355b2b3082d302091506703d2e4e239f7deed7f 22-Aug-2014 Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> usb: renesas_usbhs: fix the behavior of some usbhs_pkt_handle

Some gadget drivers will call usb_ep_queue() more than once before
the first queue doesn't finish. However, this driver didn't handle
it correctly. So, this patch fixes the behavior of some
usbhs_pkt_handle using the "running" flag. Otherwise, the oops below
happens if we use g_ncm driver and when the "iperf -u -c host -b 200M"
is running.

Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 80000007 [#1] SMP ARM
Modules linked in: usb_f_ncm g_ncm libcomposite u_ether
CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W 3.17.0-rc1-00008-g8b2be8a-dirty #20
task: c051c7e0 ti: c0512000 task.ti: c0512000
PC is at 0x0
LR is at usbhsf_pkt_handler+0xa8/0x114
pc : [<00000000>] lr : [<c0278fb4>] psr: 60000193
sp : c0513ce8 ip : c0513c58 fp : c0513d24
r10: 00000001 r9 : 00000193 r8 : eebec4a0
r7 : eebec410 r6 : eebe0c6c r5 : 00000000 r4 : ee4a2774
r3 : 00000000 r2 : ee251e00 r1 : c0513cf4 r0 : ee4a2774

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
dfb87b8bfe09f933abaf387693992089f6f9053e 09-Jul-2014 Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> usb: renesas_usbhs: gadget: fix re-enabling pipe without re-connecting

This patch fixes an issue that the renesas_usbhs driver in gadget mode
cannot work correctly even if I disabled DMAC of the driver when I used
the g_zero driver and the testusb tool.

When a usb cable is re-connected, the renesas_usbhs driver calls the
usbhsp_flags_init() (via usbhs_hotplug() --> usbhs_mod_call(start) -->
usbhsg_try_start() --> usbhs_pipe_init()). However, the driver doesn't
call the usbhsp_flags_init() when usbhsg_ep_disable() is called.
So, if a gadget driver calls usb_ep_enable() and usb_ep_disable() again
and again, the renesas_usbhs driver will output the following log:

renesas_usbhs renesas_usbhs: can't get pipe (BULK)
renesas_usbhs renesas_usbhs: wrong recip request

Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
6a0541599f54b556442d6130e4f9faaad91bf3a2 09-Jul-2014 Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> usb: renesas_usbhs: fix usbhs_pipe_malloc() to re-enable a pipe.

This patch fixes an issue that the driver cannot push a new data when
a pipe is re-enabled after the pipe is queued.

Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
1c90ee0b3e30235165180a1a8ee3fb3cbe47d295 07-Nov-2012 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: use transfer counter if IN direction bulk pipe

received data will break if it was bulk pipe and large data size,
because pipe kept BUF PID even though it doesn't have enough buffer.
To avoid this issue, renesas_usbhs can use transfer counter.
Pipe PID will be NAK if it didn't have enough buffer by this patch.

renesas_usbhs has strange address mapping.
Thus, it is difficult to calculate transfer counter setting address.
This patch use fixed table for it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
cc502bb741e1797290381da14dddb695ec1adbaf 03-Jun-2012 Paul Bolle <pebolle@tiscali.nl> renesas_usbhs: cleanup quoted includes

A few quoted includes start with a superfluous "./". Clean up those
quoted includes.

Signed-off-by: Paul Bolle <pebolle@tiscali.nl>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
14ff96e04c0b29736c8c81fbe75e86dd373c8e22 21-Dec-2011 Felipe Balbi <balbi@ti.com> usb: renesas: pipe: convert a long if into a XOR operation

This is just a minor optimization for the long
if we have on the driver.

When we want to check that one input is true
and the other must be false, the bitwise XOR
operator will achieve that for us.

Tested-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
3edeee3893b107364fe4ed8535245773b1e1e72b 09-Dec-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: care pipe sequence

driver has to re-use the limited pipe for each device/endpoint
when it is USB host hub mode, since number of pipe has limitation.

Then, each pipe should care own pipe sequence for next packet.
This patch adds sequence control.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
9cf1b06e906d8590fc027264af30b37754bd8226 25-Nov-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: add usbhs_pipe_is_stall()

This is preparation for chapter 9 test

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
e2eddc6103c7f00a2a1a0dfe5fac494d039b099a 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: usbhs_dcp_control_transfer_done() cares mod_host

CCPL setting is needed on only mod_gadget.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
6e6db82ba9bf2d5912897f77ccf6902cb8543372 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: modify pipe sequence settings

renesas_usbhs can manually set DATA0/DATA1.
This patch is prepare for mod_host support

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
b331872b85c2ab388129af3343474e02e89498af 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: move done callback to struct usbhs_pkt

transfer done function was registered in struct struct usbhs_pipe_info.
It was good for mod_gadget, but not good for mod_host.
This function move it to struct usbhs_pkt.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
3cf8ed1284799406c506029207004e97d5b2c738 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: add usbhs_pipe_name()

pipe name is usefull function for mod_xxx

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
bc6fbf59df75c4e3533d0daf7873f783c835bd53 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: add device select support in usbhs_pipe_config_update()

device select method will be used on mod_host

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
2cc971978c0cabcd7760f4431270088cda72d8df 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: add struct usbhs_priv to packet done function

There was no method to get struct usbhs_priv when
packet transfer done function was called.
This patch allow that callback function receive it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
923520715b5a698271f8763e97eee65e21d5561e 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: add usbhs_dcp_dir_for_host()

renesas_usbhs device needs special bit settings
if it was mod_host and dcp pipe.
This patch support it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
0deb3e77025688e0650e1af672d3e42e15cd8916 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: remove unneeded parameter from usbhs_mod_is_host()

it was possible to get usbhs_mod from usbhs_priv.
this patch remove unneeded parameter.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
ef8bedb9048c293dfa85ac36482a1970646a8272 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: move usbhs_usbreq_get/set_val() to common.c

usbhs_usbreq_get/set_val() functions were in pipe.c file,
but it is irrelevant to pipe.
this patch move it to common.c

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
356db7edadb98edbc60abf46b86a1816bfee6278 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: move usbhsp_type() to usbhs_pipe_type()

Pipe type check macro will be used in other files.
This patch move local macro to global macro.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
7fd097e727466cda1b22beca6cb11096b8be88d2 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: each pipe hold maxpacket size

Current renesas_usbhs pipe accessed DCPMAXP/PIPEMAXP register
to get own maxpacket size every time.
But maxpacket size isn't changed after pipe start,
and register access is too slow.

This patch adds new maxp variable to keep own maxpacket.
And un-used function are removed.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
f5aa889f725b56934171f9845cf00a17de9cc76c 11-Oct-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: gadget: renesas_usbhs: remove desc from usbhs_pipe_malloc

Current usbhs_pipe_malloc() used usb_endpoint_descriptor to
get necessary information.
It was very good for mod_gadget which allocate pipe in runtime,
but is not good for mod_host which allocate pipe in initial timing.
This patch remove usb_endpoint_descriptor from usbhs_pipe_malloc()

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
dfd8c81fd1c09c740140a2334669994d5c6edcaa 25-Jul-2011 kuninori.morimoto.gx@renesas.com <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: use usb_endpoint_maxp()

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
08e6c611123ab499757e4133df7ddc0875c0dccf 09-Jun-2011 Kuninori Morimoto <morimoto.kuninori@renesas.com> usb: renesas_usbhs: fixup connection fail

Sometimes the connection fail happen on renesas_usbhs.
This patch fix it up.

Signed-off-by: Kuninori Morimoto <morimoto.kuninori@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
e73a9891b3a1c9fc0970e0c9dbe2cc47933ad752 06-Jun-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: add DMAEngine support

USB DMA was installed on "normal DMAC" when SH7724 or older SuperH,
but the "USB-DMAC" was prepared on recent SuperH.
These 2 DMAC have a little bit different behavior.

This patch add DMAEngine code for "normal DMAC",
but it is still using PIO fifo.
The DMA fifo will be formally supported in the future.

You can enable DMA fifo by local fixup
usbhs_fifo_pio_push_handler -> usbhs_fifo_dma_push_handler
usbhs_fifo_pio_pop_handler -> usbhs_fifo_dma_pop_handler
on usbhsg_ep_enable.

This DMAEngine was tested by g_file_storage on SH7724 Ecovec board

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
d77e3f4e1743834c7b4acb54004ffd7f57c82582 06-Jun-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: add pipe/fifo link

renesas_usbhs has CFIFO which is for PIO transfer,
and D0FIFO/D1FIFO which are for DMA transfer.
The pipe selects one of these fifo when it send/recv data.
But fifo must not be selected to different pipe in same time.
This patch add pipe/fifo link for each other,
and fifo is not selected by another pipe until it is unselected.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
dad67397f2090b29cd1f169e6a4ac6f3532c6858 06-Jun-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: modify data transfer interrupt

On current driver, overall data transfer method was implemented in fifo.c,
but its interrupt which is member of packet queue control
was still in mod_gadget.c.
This patch move it into fifo.c.
By this patch, the packet/fifo control is independent from mod_gadget.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
6acb95d4e0709a582023e87f9b3537fb4d837fd0 06-Jun-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: modify packet queue control method

Current renesas_usbhs driver is controlling packet queue on mod_gadget.c.
But it has relationship with pipe/fifo, not host/gadget.
So, controlling USB packet queue in pipe.c/fifo.c is
more convenient than in mod_gadget.c.
This patch modify it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
4bd0481152d0d5e8326d7e24329b0069713ed718 06-Jun-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: divide data transfer functions

DMAEngine will be supported to this driver in the future.
Then, both PIO and DMA data transfer method should be supported.
But, the transfer function can returns the result immediately
in PIO version, but it can't in DMA version.
This patch divides data transfer functions into top/bottom half
in preparation for DMAEngine support.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
e8d548d549688d335236f7f6f8bcee141a207ff8 06-Jun-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: fifo became independent from pipe.

Current renesas_usbhs has PIO data transfer mode which controls CFIFO.
And it was implemented in pipe.c.
But, fifo control method needs more flexible implementation
to support DMAEngine.
This patch create fifo.c, and it became independent from pipe.c.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
ad6f2a8bc53b7cc104f481a648ce357528cc08eb 06-Jun-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: modify pipe direction flags

Current driver had pipe direction flag
which came from usb_endpoint_dir_in().
It means "input direction" for HOST,
and "out direction" for Gadget.
But driver needs "input direction for pipe".
This patch adds IS_DIR_HOST flags and care
both "input direction for HOST" and "input direction for pipe"

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
c786e09c35924252ff219241e7027e340b77252d 11-May-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: fixup fifo disable

It was necessary to check pipe condition after disable fifo.
Current driver checked it in a wrong place.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
f429ea3f3488e1a0683f6f9ce76b420b5ebd2d63 21-Apr-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: add error reason for usbhs_pipe_malloc

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
45e13e6e0aa954af2d4779a07262f4c12d6f032f 21-Apr-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: modify fifo clear timing

Pipe buffer should be cleaned before using it,
but should NOT be cleaned in pipe "prepare" function.
Because the pipe might be working in such timing.
This patch fixup this issue.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
f1407d5c66240b33d11a7f1a41d55ccf6a9d7647 04-Apr-2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> usb: renesas_usbhs: Add Renesas USBHS common code

Renesas SuperH has USBHS IP which can switch Host / Function.
This driver is designed so that Host / Function may dynamically change.
This patch add usb/renesas_usbhs and common code for SuperH USBHS.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>