[U-Boot] [UBOOT RFC PATCH 09/13] common: cmd_dfu: add an API that takes controller index for handling interrupts

Kishon Vijay Abraham I
2014-08-19T16:09:41Z

Hi,

On Tuesday 19 August 2014 02:23 PM, Lukasz Majewski wrote:
> Hi Kishon,
>
>> Since there can be multiple USB controllers in the system,
>> usb_gadget_handle_interrupts should take controller index as
>> arguments.
>
> The controller index is passed in the ums/dfu/thor command. Then PHY
> subsystem is properly configured.
> Since we only handle one USB controller transmission at a time (u-boot
> doesn't use interrupts - we only pool) the
> usb_gadget_handle_interrupts() was enough for our purpose.

yeah, if we have only one USB controller in the system, controller index is not
needed.

-Kishon
>
> To start transmission from other usb controller you need to end current
> transmission and then invoke modified command with different controller
> number.
>
> It would be enough to extend
> usb_gadget_handle_interrupts() to accept controller index argument
> (only six boards use it - it shall be easy to modify them all).
>
>> However such an API can only be added in board file so
>> added board_usb_gadget_handle_interrupts().
>> usb_gadget_handle_interrupts() should be deprecated.
>>
>> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
>> ---
>> common/cmd_dfu.c | 1 +
>> include/usb.h | 7 +++++++
>> 2 files changed, 8 insertions(+)
>>
>> diff --git a/common/cmd_dfu.c b/common/cmd_dfu.c
>> index 1e7d50c..f27ba52 100644
>> --- a/common/cmd_dfu.c
>> +++ b/common/cmd_dfu.c
>> @@ -52,6 +52,7 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int
>> argc, char * const argv[]) goto exit;
>>
>> usb_gadget_handle_interrupts();
>> + board_usb_gadget_handle_interrupts(controller_index);
>
> NAK, for the reason stated above.
>
>> }
>> exit:
>> g_dnl_unregister();
>> diff --git a/include/usb.h b/include/usb.h
>> index d9fedee..26c6462 100644
>> --- a/include/usb.h
>> +++ b/include/usb.h
>> @@ -197,6 +197,13 @@ int board_usb_init(int index, enum usb_init_type
>> init); */
>> int board_usb_cleanup(int index, enum usb_init_type init);
>>
>> +/*
>> + * Can be use to handle interrupts from a specific controller.
>> + *
>> + * @index index of the USB controller
>> + */
>> +int board_usb_gadget_handle_interrupts(int index);
>> +
>> #ifdef CONFIG_USB_STORAGE
>>
>> #define USB_MAX_STOR_DEV 5
>
>
>