Re: [PATCH 41/50] staging: most: usb: clear functional stall on OUT endpoint

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

 



Hi Christian,

On 21 November 2017 at 19:35, Christian Gromm
<christian.gromm@xxxxxxxxxxxxx> wrote:
> For the MOST packet channel there are two dedicated USB endpoints. But
> internally the hardware has actually one channel for data forwarding from
> and to MOST. To have the hardware clean up its state machine correctly in
> case of an error, both USB pipes need to be reset.  This patch triggers the
> host to also clear the OUT endpoint's halt condition in case an IN endpoint
> has signaled to be stalled.
>
> Signed-off-by: Christian Gromm <christian.gromm@xxxxxxxxxxxxx>
> ---
>  drivers/staging/most/usb/usb.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/drivers/staging/most/usb/usb.c b/drivers/staging/most/usb/usb.c
> index acd0a36..49f5495 100644
> --- a/drivers/staging/most/usb/usb.c
> +++ b/drivers/staging/most/usb/usb.c
> @@ -815,6 +815,21 @@ static void wq_clear_halt(struct work_struct *wq_obj)
>         if (usb_clear_halt(mdev->usb_device, pipe))
>                 dev_warn(&mdev->usb_device->dev, "Failed to reset endpoint.\n");
>
> +       /* If the functional Stall condition has been set on an
> +        * asynchronous rx channel, we need to clear the tx channel
> +        * too, since the hardware runs its clean-up sequence on both
> +        * channels, as they are physically one on the network.
> +        *
> +        * The USB interface that exposes the asynchronous channels
> +        * contains always two endpoints, and two only.
> +        */
> +       if (mdev->conf[channel].data_type == MOST_CH_ASYNC &&
> +           mdev->conf[channel].direction == MOST_CH_RX) {
> +               int peer = 1 - channel;
> +               int snd_pipe = usb_sndbulkpipe(mdev->usb_device,
> +                                              mdev->ep_address[peer]);
> +               usb_clear_halt(mdev->usb_device, snd_pipe);
> +       }
>         mdev->is_channel_healthy[channel] = true;
>         most_resume_enqueue(&mdev->iface, channel);
>         mutex_unlock(&mdev->io_mutex);
> --
> 2.7.4
>
> _______________________________________________
> devel mailing list
> devel@xxxxxxxxxxxxxxxxxxxxxx
> http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

This fix is independent of the series. Can you decouple this and post
as a separate patch? This fix can go in even if the series takes time
to go in.

Regards,
PrasannaKumar
_______________________________________________
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