diff mbox

[U-Boot,v3,1/6] drivers: usb: gadget: ether: adopt to usb driver model

Message ID 20161117080909.14856-2-mugunthanvnm@ti.com
State Not Applicable
Delegated to: Simon Glass
Headers show

Commit Message

Mugunthan V N Nov. 17, 2016, 8:09 a.m. UTC
Convert usb ether gadget to adopt usb driver model

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 drivers/usb/gadget/ether.c | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

Comments

Simon Glass Nov. 18, 2016, 7:34 p.m. UTC | #1
Hi Mugunthan,

On 17 November 2016 at 01:09, Mugunthan V N <mugunthanvnm@ti.com> wrote:
> Convert usb ether gadget to adopt usb driver model
>
> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Sorry, but I'd like to 'un-review' this.

> ---
>  drivers/usb/gadget/ether.c | 36 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 36 insertions(+)
>
> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
> index 497b981129..9bc61186cf 100644
> --- a/drivers/usb/gadget/ether.c
> +++ b/drivers/usb/gadget/ether.c
> @@ -24,6 +24,10 @@
>  #include "gadget_chips.h"
>  #include "rndis.h"
>
> +#include <dm.h>
> +#include <dm/uclass-internal.h>
> +#include <dm/device-internal.h>
> +
>  #define USB_NET_NAME "usb_ether"
>
>  #define atomic_read
> @@ -101,6 +105,9 @@ struct eth_dev {
>         struct usb_gadget       *gadget;
>         struct usb_request      *req;           /* for control responses */
>         struct usb_request      *stat_req;      /* for cdc & rndis status */
> +#ifdef CONFIG_DM_USB
> +       struct udevice          *usb_udev;
> +#endif
>
>         u8                      config;
>         struct usb_ep           *in_ep, *out_ep, *status_ep;
> @@ -2303,6 +2310,24 @@ fail:
>
>  /*-------------------------------------------------------------------------*/
>
> +#ifdef CONFIG_DM_USB
> +int dm_usb_init(struct eth_dev *e_dev)
> +{
> +       struct udevice *dev = NULL;
> +       int ret;
> +
> +       ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
> +       if (!dev || ret) {
> +               error("No USB device found\n");
> +               return -ENODEV;
> +       }
> +
> +       e_dev->usb_udev = dev;
> +
> +       return ret;
> +}
> +#endif
> +
>  static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>  {
>         struct eth_dev *dev = &l_ethdev;
> @@ -2315,7 +2340,14 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>                 goto fail;
>         }
>
> +#ifdef CONFIG_DM_USB
> +       if (dm_usb_init(dev)) {
> +               error("USB ether not found\n");
> +               return -ENODEV;
> +       }
> +#else
>         board_usb_init(0, USB_INIT_DEVICE);
> +#endif
>
>         /* Configure default mac-addresses for the USB ethernet device */
>  #ifdef CONFIG_USBNET_DEV_ADDR
> @@ -2497,7 +2529,11 @@ void usb_eth_halt(struct eth_device *netdev)
>         }
>
>         usb_gadget_unregister_driver(&eth_driver);
> +#ifdef CONFIG_DM_USB
> +       device_remove(dev->usb_udev);
> +#else
>         board_usb_cleanup(0, USB_INIT_DEVICE);
> +#endif

This doesn't look right to me. If your board is to be an Ethernet
device then it should do:

uclass_first_device(UCLASS_ETH, &dev)

to get the device. That could be in the device tree under the USB
node, or perhaps you want to have a setup function which manualy binds
the device, a bit like usb_find_and_bind_driver().

>  }
>
>  static struct usb_gadget_driver eth_driver = {
> --
> 2.11.0.rc1
>

Regards,
Simon
Mugunthan V N Nov. 21, 2016, 5:38 a.m. UTC | #2
Hi Simon,

On Saturday 19 November 2016 01:04 AM, Simon Glass wrote:
> Hi Mugunthan,
> 
> On 17 November 2016 at 01:09, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>> Convert usb ether gadget to adopt usb driver model
>>
>> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
>> Reviewed-by: Simon Glass <sjg@chromium.org>
> 
> Sorry, but I'd like to 'un-review' this.
> 
>> ---
>>  drivers/usb/gadget/ether.c | 36 ++++++++++++++++++++++++++++++++++++
>>  1 file changed, 36 insertions(+)
>>
>> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
>> index 497b981129..9bc61186cf 100644
>> --- a/drivers/usb/gadget/ether.c
>> +++ b/drivers/usb/gadget/ether.c
>> @@ -24,6 +24,10 @@
>>  #include "gadget_chips.h"
>>  #include "rndis.h"
>>
>> +#include <dm.h>
>> +#include <dm/uclass-internal.h>
>> +#include <dm/device-internal.h>
>> +
>>  #define USB_NET_NAME "usb_ether"
>>
>>  #define atomic_read
>> @@ -101,6 +105,9 @@ struct eth_dev {
>>         struct usb_gadget       *gadget;
>>         struct usb_request      *req;           /* for control responses */
>>         struct usb_request      *stat_req;      /* for cdc & rndis status */
>> +#ifdef CONFIG_DM_USB
>> +       struct udevice          *usb_udev;
>> +#endif
>>
>>         u8                      config;
>>         struct usb_ep           *in_ep, *out_ep, *status_ep;
>> @@ -2303,6 +2310,24 @@ fail:
>>
>>  /*-------------------------------------------------------------------------*/
>>
>> +#ifdef CONFIG_DM_USB
>> +int dm_usb_init(struct eth_dev *e_dev)
>> +{
>> +       struct udevice *dev = NULL;
>> +       int ret;
>> +
>> +       ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
>> +       if (!dev || ret) {
>> +               error("No USB device found\n");
>> +               return -ENODEV;
>> +       }
>> +
>> +       e_dev->usb_udev = dev;
>> +
>> +       return ret;
>> +}
>> +#endif
>> +
>>  static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>  {
>>         struct eth_dev *dev = &l_ethdev;
>> @@ -2315,7 +2340,14 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>                 goto fail;
>>         }
>>
>> +#ifdef CONFIG_DM_USB
>> +       if (dm_usb_init(dev)) {
>> +               error("USB ether not found\n");
>> +               return -ENODEV;
>> +       }
>> +#else
>>         board_usb_init(0, USB_INIT_DEVICE);
>> +#endif
>>
>>         /* Configure default mac-addresses for the USB ethernet device */
>>  #ifdef CONFIG_USBNET_DEV_ADDR
>> @@ -2497,7 +2529,11 @@ void usb_eth_halt(struct eth_device *netdev)
>>         }
>>
>>         usb_gadget_unregister_driver(&eth_driver);
>> +#ifdef CONFIG_DM_USB
>> +       device_remove(dev->usb_udev);
>> +#else
>>         board_usb_cleanup(0, USB_INIT_DEVICE);
>> +#endif
> 
> This doesn't look right to me. If your board is to be an Ethernet
> device then it should do:
> 
> uclass_first_device(UCLASS_ETH, &dev)
> 
> to get the device. That could be in the device tree under the USB
> node, or perhaps you want to have a setup function which manualy binds
> the device, a bit like usb_find_and_bind_driver().
> 

This patch is to get usb device for the ether gadget. It uses the same
api with UCLASS_USB_DEV_GENERIC to get usb device. The patch hadn't done
for eth driver model adoption.

Regards
Mugunthan V N
Simon Glass Nov. 24, 2016, 2:21 a.m. UTC | #3
Hi Mugunthan,

On 20 November 2016 at 22:38, Mugunthan V N <mugunthanvnm@ti.com> wrote:
> Hi Simon,
>
> On Saturday 19 November 2016 01:04 AM, Simon Glass wrote:
>> Hi Mugunthan,
>>
>> On 17 November 2016 at 01:09, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>>> Convert usb ether gadget to adopt usb driver model
>>>
>>> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>
>> Sorry, but I'd like to 'un-review' this.
>>
>>> ---
>>>  drivers/usb/gadget/ether.c | 36 ++++++++++++++++++++++++++++++++++++
>>>  1 file changed, 36 insertions(+)
>>>
>>> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
>>> index 497b981129..9bc61186cf 100644
>>> --- a/drivers/usb/gadget/ether.c
>>> +++ b/drivers/usb/gadget/ether.c
>>> @@ -24,6 +24,10 @@
>>>  #include "gadget_chips.h"
>>>  #include "rndis.h"
>>>
>>> +#include <dm.h>
>>> +#include <dm/uclass-internal.h>
>>> +#include <dm/device-internal.h>
>>> +
>>>  #define USB_NET_NAME "usb_ether"
>>>
>>>  #define atomic_read
>>> @@ -101,6 +105,9 @@ struct eth_dev {
>>>         struct usb_gadget       *gadget;
>>>         struct usb_request      *req;           /* for control responses */
>>>         struct usb_request      *stat_req;      /* for cdc & rndis status */
>>> +#ifdef CONFIG_DM_USB
>>> +       struct udevice          *usb_udev;
>>> +#endif
>>>
>>>         u8                      config;
>>>         struct usb_ep           *in_ep, *out_ep, *status_ep;
>>> @@ -2303,6 +2310,24 @@ fail:
>>>
>>>  /*-------------------------------------------------------------------------*/
>>>
>>> +#ifdef CONFIG_DM_USB
>>> +int dm_usb_init(struct eth_dev *e_dev)
>>> +{
>>> +       struct udevice *dev = NULL;
>>> +       int ret;
>>> +
>>> +       ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
>>> +       if (!dev || ret) {
>>> +               error("No USB device found\n");
>>> +               return -ENODEV;
>>> +       }
>>> +
>>> +       e_dev->usb_udev = dev;
>>> +
>>> +       return ret;
>>> +}
>>> +#endif
>>> +
>>>  static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>>  {
>>>         struct eth_dev *dev = &l_ethdev;
>>> @@ -2315,7 +2340,14 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>>                 goto fail;
>>>         }
>>>
>>> +#ifdef CONFIG_DM_USB
>>> +       if (dm_usb_init(dev)) {
>>> +               error("USB ether not found\n");
>>> +               return -ENODEV;
>>> +       }
>>> +#else
>>>         board_usb_init(0, USB_INIT_DEVICE);
>>> +#endif
>>>
>>>         /* Configure default mac-addresses for the USB ethernet device */
>>>  #ifdef CONFIG_USBNET_DEV_ADDR
>>> @@ -2497,7 +2529,11 @@ void usb_eth_halt(struct eth_device *netdev)
>>>         }
>>>
>>>         usb_gadget_unregister_driver(&eth_driver);
>>> +#ifdef CONFIG_DM_USB
>>> +       device_remove(dev->usb_udev);
>>> +#else
>>>         board_usb_cleanup(0, USB_INIT_DEVICE);
>>> +#endif
>>
>> This doesn't look right to me. If your board is to be an Ethernet
>> device then it should do:
>>
>> uclass_first_device(UCLASS_ETH, &dev)
>>
>> to get the device. That could be in the device tree under the USB
>> node, or perhaps you want to have a setup function which manualy binds
>> the device, a bit like usb_find_and_bind_driver().
>>
>
> This patch is to get usb device for the ether gadget. It uses the same
> api with UCLASS_USB_DEV_GENERIC to get usb device. The patch hadn't done
> for eth driver model adoption.

So can you do that one first, or is it coming soon?

Regards,
Simon
Mugunthan V N Nov. 24, 2016, 8:11 a.m. UTC | #4
Hi Simon

On Thursday 24 November 2016 07:51 AM, Simon Glass wrote:
> Hi Mugunthan,
> 
> On 20 November 2016 at 22:38, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>> Hi Simon,
>>
>> On Saturday 19 November 2016 01:04 AM, Simon Glass wrote:
>>> Hi Mugunthan,
>>>
>>> On 17 November 2016 at 01:09, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>>>> Convert usb ether gadget to adopt usb driver model
>>>>
>>>> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>
>>> Sorry, but I'd like to 'un-review' this.
>>>
>>>> ---
>>>>  drivers/usb/gadget/ether.c | 36 ++++++++++++++++++++++++++++++++++++
>>>>  1 file changed, 36 insertions(+)
>>>>
>>>> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
>>>> index 497b981129..9bc61186cf 100644
>>>> --- a/drivers/usb/gadget/ether.c
>>>> +++ b/drivers/usb/gadget/ether.c
>>>> @@ -24,6 +24,10 @@
>>>>  #include "gadget_chips.h"
>>>>  #include "rndis.h"
>>>>
>>>> +#include <dm.h>
>>>> +#include <dm/uclass-internal.h>
>>>> +#include <dm/device-internal.h>
>>>> +
>>>>  #define USB_NET_NAME "usb_ether"
>>>>
>>>>  #define atomic_read
>>>> @@ -101,6 +105,9 @@ struct eth_dev {
>>>>         struct usb_gadget       *gadget;
>>>>         struct usb_request      *req;           /* for control responses */
>>>>         struct usb_request      *stat_req;      /* for cdc & rndis status */
>>>> +#ifdef CONFIG_DM_USB
>>>> +       struct udevice          *usb_udev;
>>>> +#endif
>>>>
>>>>         u8                      config;
>>>>         struct usb_ep           *in_ep, *out_ep, *status_ep;
>>>> @@ -2303,6 +2310,24 @@ fail:
>>>>
>>>>  /*-------------------------------------------------------------------------*/
>>>>
>>>> +#ifdef CONFIG_DM_USB
>>>> +int dm_usb_init(struct eth_dev *e_dev)
>>>> +{
>>>> +       struct udevice *dev = NULL;
>>>> +       int ret;
>>>> +
>>>> +       ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
>>>> +       if (!dev || ret) {
>>>> +               error("No USB device found\n");
>>>> +               return -ENODEV;
>>>> +       }
>>>> +
>>>> +       e_dev->usb_udev = dev;
>>>> +
>>>> +       return ret;
>>>> +}
>>>> +#endif
>>>> +
>>>>  static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>>>  {
>>>>         struct eth_dev *dev = &l_ethdev;
>>>> @@ -2315,7 +2340,14 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>>>                 goto fail;
>>>>         }
>>>>
>>>> +#ifdef CONFIG_DM_USB
>>>> +       if (dm_usb_init(dev)) {
>>>> +               error("USB ether not found\n");
>>>> +               return -ENODEV;
>>>> +       }
>>>> +#else
>>>>         board_usb_init(0, USB_INIT_DEVICE);
>>>> +#endif
>>>>
>>>>         /* Configure default mac-addresses for the USB ethernet device */
>>>>  #ifdef CONFIG_USBNET_DEV_ADDR
>>>> @@ -2497,7 +2529,11 @@ void usb_eth_halt(struct eth_device *netdev)
>>>>         }
>>>>
>>>>         usb_gadget_unregister_driver(&eth_driver);
>>>> +#ifdef CONFIG_DM_USB
>>>> +       device_remove(dev->usb_udev);
>>>> +#else
>>>>         board_usb_cleanup(0, USB_INIT_DEVICE);
>>>> +#endif
>>>
>>> This doesn't look right to me. If your board is to be an Ethernet
>>> device then it should do:
>>>
>>> uclass_first_device(UCLASS_ETH, &dev)
>>>
>>> to get the device. That could be in the device tree under the USB
>>> node, or perhaps you want to have a setup function which manualy binds
>>> the device, a bit like usb_find_and_bind_driver().
>>>
>>
>> This patch is to get usb device for the ether gadget. It uses the same
>> api with UCLASS_USB_DEV_GENERIC to get usb device. The patch hadn't done
>> for eth driver model adoption.
> 
> So can you do that one first, or is it coming soon?
> 

Its already implemented above in the function dm_usb_init()

Regards
Mugunthan V N
Simon Glass Nov. 27, 2016, 5:02 p.m. UTC | #5
Hi Mugunthan,

On 24 November 2016 at 01:11, Mugunthan V N <mugunthanvnm@ti.com> wrote:
> Hi Simon
>
> On Thursday 24 November 2016 07:51 AM, Simon Glass wrote:
>> Hi Mugunthan,
>>
>> On 20 November 2016 at 22:38, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>>> Hi Simon,
>>>
>>> On Saturday 19 November 2016 01:04 AM, Simon Glass wrote:
>>>> Hi Mugunthan,
>>>>
>>>> On 17 November 2016 at 01:09, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>>>>> Convert usb ether gadget to adopt usb driver model
>>>>>
>>>>> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
>>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>>
>>>> Sorry, but I'd like to 'un-review' this.
>>>>
>>>>> ---
>>>>>  drivers/usb/gadget/ether.c | 36 ++++++++++++++++++++++++++++++++++++
>>>>>  1 file changed, 36 insertions(+)
>>>>>
>>>>> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
>>>>> index 497b981129..9bc61186cf 100644
>>>>> --- a/drivers/usb/gadget/ether.c
>>>>> +++ b/drivers/usb/gadget/ether.c
>>>>> @@ -24,6 +24,10 @@
>>>>>  #include "gadget_chips.h"
>>>>>  #include "rndis.h"
>>>>>
>>>>> +#include <dm.h>
>>>>> +#include <dm/uclass-internal.h>
>>>>> +#include <dm/device-internal.h>
>>>>> +
>>>>>  #define USB_NET_NAME "usb_ether"
>>>>>
>>>>>  #define atomic_read
>>>>> @@ -101,6 +105,9 @@ struct eth_dev {
>>>>>         struct usb_gadget       *gadget;
>>>>>         struct usb_request      *req;           /* for control responses */
>>>>>         struct usb_request      *stat_req;      /* for cdc & rndis status */
>>>>> +#ifdef CONFIG_DM_USB
>>>>> +       struct udevice          *usb_udev;
>>>>> +#endif
>>>>>
>>>>>         u8                      config;
>>>>>         struct usb_ep           *in_ep, *out_ep, *status_ep;
>>>>> @@ -2303,6 +2310,24 @@ fail:
>>>>>
>>>>>  /*-------------------------------------------------------------------------*/
>>>>>
>>>>> +#ifdef CONFIG_DM_USB
>>>>> +int dm_usb_init(struct eth_dev *e_dev)
>>>>> +{
>>>>> +       struct udevice *dev = NULL;
>>>>> +       int ret;
>>>>> +
>>>>> +       ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
>>>>> +       if (!dev || ret) {
>>>>> +               error("No USB device found\n");
>>>>> +               return -ENODEV;
>>>>> +       }
>>>>> +
>>>>> +       e_dev->usb_udev = dev;
>>>>> +
>>>>> +       return ret;
>>>>> +}
>>>>> +#endif
>>>>> +
>>>>>  static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>>>>  {
>>>>>         struct eth_dev *dev = &l_ethdev;
>>>>> @@ -2315,7 +2340,14 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>>>>                 goto fail;
>>>>>         }
>>>>>
>>>>> +#ifdef CONFIG_DM_USB
>>>>> +       if (dm_usb_init(dev)) {
>>>>> +               error("USB ether not found\n");
>>>>> +               return -ENODEV;
>>>>> +       }
>>>>> +#else
>>>>>         board_usb_init(0, USB_INIT_DEVICE);
>>>>> +#endif
>>>>>
>>>>>         /* Configure default mac-addresses for the USB ethernet device */
>>>>>  #ifdef CONFIG_USBNET_DEV_ADDR
>>>>> @@ -2497,7 +2529,11 @@ void usb_eth_halt(struct eth_device *netdev)
>>>>>         }
>>>>>
>>>>>         usb_gadget_unregister_driver(&eth_driver);
>>>>> +#ifdef CONFIG_DM_USB
>>>>> +       device_remove(dev->usb_udev);
>>>>> +#else
>>>>>         board_usb_cleanup(0, USB_INIT_DEVICE);
>>>>> +#endif
>>>>
>>>> This doesn't look right to me. If your board is to be an Ethernet
>>>> device then it should do:
>>>>
>>>> uclass_first_device(UCLASS_ETH, &dev)
>>>>
>>>> to get the device. That could be in the device tree under the USB
>>>> node, or perhaps you want to have a setup function which manualy binds
>>>> the device, a bit like usb_find_and_bind_driver().
>>>>
>>>
>>> This patch is to get usb device for the ether gadget. It uses the same
>>> api with UCLASS_USB_DEV_GENERIC to get usb device. The patch hadn't done
>>> for eth driver model adoption.
>>
>> So can you do that one first, or is it coming soon?
>>
>
> Its already implemented above in the function dm_usb_init()

So are you saying that the Ethernet 'USB device' driver needs to be
converted to driver model? Otherwise what stops us from using
UCLASS_ETH here?

Regards,
Simon
Joe Hershberger Nov. 29, 2016, 11:13 p.m. UTC | #6
On Sun, Nov 27, 2016 at 11:02 AM, Simon Glass <sjg@chromium.org> wrote:
> Hi Mugunthan,
>
> On 24 November 2016 at 01:11, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>> Hi Simon
>>
>> On Thursday 24 November 2016 07:51 AM, Simon Glass wrote:
>>> Hi Mugunthan,
>>>
>>> On 20 November 2016 at 22:38, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>>>> Hi Simon,
>>>>
>>>> On Saturday 19 November 2016 01:04 AM, Simon Glass wrote:
>>>>> Hi Mugunthan,
>>>>>
>>>>> On 17 November 2016 at 01:09, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>>>>>> Convert usb ether gadget to adopt usb driver model
>>>>>>
>>>>>> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
>>>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>>>
>>>>> Sorry, but I'd like to 'un-review' this.
>>>>>
>>>>>> ---
>>>>>>  drivers/usb/gadget/ether.c | 36 ++++++++++++++++++++++++++++++++++++
>>>>>>  1 file changed, 36 insertions(+)
>>>>>>
>>>>>> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
>>>>>> index 497b981129..9bc61186cf 100644
>>>>>> --- a/drivers/usb/gadget/ether.c
>>>>>> +++ b/drivers/usb/gadget/ether.c
>>>>>> @@ -24,6 +24,10 @@
>>>>>>  #include "gadget_chips.h"
>>>>>>  #include "rndis.h"
>>>>>>
>>>>>> +#include <dm.h>
>>>>>> +#include <dm/uclass-internal.h>
>>>>>> +#include <dm/device-internal.h>
>>>>>> +
>>>>>>  #define USB_NET_NAME "usb_ether"
>>>>>>
>>>>>>  #define atomic_read
>>>>>> @@ -101,6 +105,9 @@ struct eth_dev {
>>>>>>         struct usb_gadget       *gadget;
>>>>>>         struct usb_request      *req;           /* for control responses */
>>>>>>         struct usb_request      *stat_req;      /* for cdc & rndis status */
>>>>>> +#ifdef CONFIG_DM_USB
>>>>>> +       struct udevice          *usb_udev;
>>>>>> +#endif
>>>>>>
>>>>>>         u8                      config;
>>>>>>         struct usb_ep           *in_ep, *out_ep, *status_ep;
>>>>>> @@ -2303,6 +2310,24 @@ fail:
>>>>>>
>>>>>>  /*-------------------------------------------------------------------------*/
>>>>>>
>>>>>> +#ifdef CONFIG_DM_USB
>>>>>> +int dm_usb_init(struct eth_dev *e_dev)
>>>>>> +{
>>>>>> +       struct udevice *dev = NULL;
>>>>>> +       int ret;
>>>>>> +
>>>>>> +       ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
>>>>>> +       if (!dev || ret) {
>>>>>> +               error("No USB device found\n");
>>>>>> +               return -ENODEV;
>>>>>> +       }
>>>>>> +
>>>>>> +       e_dev->usb_udev = dev;
>>>>>> +
>>>>>> +       return ret;
>>>>>> +}
>>>>>> +#endif
>>>>>> +
>>>>>>  static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>>>>>  {
>>>>>>         struct eth_dev *dev = &l_ethdev;
>>>>>> @@ -2315,7 +2340,14 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>>>>>                 goto fail;
>>>>>>         }
>>>>>>
>>>>>> +#ifdef CONFIG_DM_USB
>>>>>> +       if (dm_usb_init(dev)) {
>>>>>> +               error("USB ether not found\n");
>>>>>> +               return -ENODEV;
>>>>>> +       }
>>>>>> +#else
>>>>>>         board_usb_init(0, USB_INIT_DEVICE);
>>>>>> +#endif
>>>>>>
>>>>>>         /* Configure default mac-addresses for the USB ethernet device */
>>>>>>  #ifdef CONFIG_USBNET_DEV_ADDR
>>>>>> @@ -2497,7 +2529,11 @@ void usb_eth_halt(struct eth_device *netdev)
>>>>>>         }
>>>>>>
>>>>>>         usb_gadget_unregister_driver(&eth_driver);
>>>>>> +#ifdef CONFIG_DM_USB
>>>>>> +       device_remove(dev->usb_udev);
>>>>>> +#else
>>>>>>         board_usb_cleanup(0, USB_INIT_DEVICE);
>>>>>> +#endif
>>>>>
>>>>> This doesn't look right to me. If your board is to be an Ethernet
>>>>> device then it should do:
>>>>>
>>>>> uclass_first_device(UCLASS_ETH, &dev)
>>>>>
>>>>> to get the device. That could be in the device tree under the USB
>>>>> node, or perhaps you want to have a setup function which manualy binds
>>>>> the device, a bit like usb_find_and_bind_driver().
>>>>>
>>>>
>>>> This patch is to get usb device for the ether gadget. It uses the same
>>>> api with UCLASS_USB_DEV_GENERIC to get usb device. The patch hadn't done
>>>> for eth driver model adoption.
>>>
>>> So can you do that one first, or is it coming soon?
>>>
>>
>> Its already implemented above in the function dm_usb_init()
>
> So are you saying that the Ethernet 'USB device' driver needs to be
> converted to driver model? Otherwise what stops us from using
> UCLASS_ETH here?

I think the confusion might be that this is a USB gadget and it
doesn't support ETH DM yet. This code needs lots of clean-up. It is
still using the old Ethernet stack. This just makes the driver able to
function if you have USB DM enabled.

At least that how I understand this patch.

-Joe
Mugunthan V N Nov. 30, 2016, 5:13 a.m. UTC | #7
On Wednesday 30 November 2016 04:43 AM, Joe Hershberger wrote:
> On Sun, Nov 27, 2016 at 11:02 AM, Simon Glass <sjg@chromium.org> wrote:
>> Hi Mugunthan,
>>
>> On 24 November 2016 at 01:11, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>>> Hi Simon
>>>
>>> On Thursday 24 November 2016 07:51 AM, Simon Glass wrote:
>>>> Hi Mugunthan,
>>>>
>>>> On 20 November 2016 at 22:38, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>>>>> Hi Simon,
>>>>>
>>>>> On Saturday 19 November 2016 01:04 AM, Simon Glass wrote:
>>>>>> Hi Mugunthan,
>>>>>>
>>>>>> On 17 November 2016 at 01:09, Mugunthan V N <mugunthanvnm@ti.com> wrote:
>>>>>>> Convert usb ether gadget to adopt usb driver model
>>>>>>>
>>>>>>> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
>>>>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>>>>
>>>>>> Sorry, but I'd like to 'un-review' this.
>>>>>>
>>>>>>> ---
>>>>>>>  drivers/usb/gadget/ether.c | 36 ++++++++++++++++++++++++++++++++++++
>>>>>>>  1 file changed, 36 insertions(+)
>>>>>>>
>>>>>>> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
>>>>>>> index 497b981129..9bc61186cf 100644
>>>>>>> --- a/drivers/usb/gadget/ether.c
>>>>>>> +++ b/drivers/usb/gadget/ether.c
>>>>>>> @@ -24,6 +24,10 @@
>>>>>>>  #include "gadget_chips.h"
>>>>>>>  #include "rndis.h"
>>>>>>>
>>>>>>> +#include <dm.h>
>>>>>>> +#include <dm/uclass-internal.h>
>>>>>>> +#include <dm/device-internal.h>
>>>>>>> +
>>>>>>>  #define USB_NET_NAME "usb_ether"
>>>>>>>
>>>>>>>  #define atomic_read
>>>>>>> @@ -101,6 +105,9 @@ struct eth_dev {
>>>>>>>         struct usb_gadget       *gadget;
>>>>>>>         struct usb_request      *req;           /* for control responses */
>>>>>>>         struct usb_request      *stat_req;      /* for cdc & rndis status */
>>>>>>> +#ifdef CONFIG_DM_USB
>>>>>>> +       struct udevice          *usb_udev;
>>>>>>> +#endif
>>>>>>>
>>>>>>>         u8                      config;
>>>>>>>         struct usb_ep           *in_ep, *out_ep, *status_ep;
>>>>>>> @@ -2303,6 +2310,24 @@ fail:
>>>>>>>
>>>>>>>  /*-------------------------------------------------------------------------*/
>>>>>>>
>>>>>>> +#ifdef CONFIG_DM_USB
>>>>>>> +int dm_usb_init(struct eth_dev *e_dev)
>>>>>>> +{
>>>>>>> +       struct udevice *dev = NULL;
>>>>>>> +       int ret;
>>>>>>> +
>>>>>>> +       ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
>>>>>>> +       if (!dev || ret) {
>>>>>>> +               error("No USB device found\n");
>>>>>>> +               return -ENODEV;
>>>>>>> +       }
>>>>>>> +
>>>>>>> +       e_dev->usb_udev = dev;
>>>>>>> +
>>>>>>> +       return ret;
>>>>>>> +}
>>>>>>> +#endif
>>>>>>> +
>>>>>>>  static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>>>>>>  {
>>>>>>>         struct eth_dev *dev = &l_ethdev;
>>>>>>> @@ -2315,7 +2340,14 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
>>>>>>>                 goto fail;
>>>>>>>         }
>>>>>>>
>>>>>>> +#ifdef CONFIG_DM_USB
>>>>>>> +       if (dm_usb_init(dev)) {
>>>>>>> +               error("USB ether not found\n");
>>>>>>> +               return -ENODEV;
>>>>>>> +       }
>>>>>>> +#else
>>>>>>>         board_usb_init(0, USB_INIT_DEVICE);
>>>>>>> +#endif
>>>>>>>
>>>>>>>         /* Configure default mac-addresses for the USB ethernet device */
>>>>>>>  #ifdef CONFIG_USBNET_DEV_ADDR
>>>>>>> @@ -2497,7 +2529,11 @@ void usb_eth_halt(struct eth_device *netdev)
>>>>>>>         }
>>>>>>>
>>>>>>>         usb_gadget_unregister_driver(&eth_driver);
>>>>>>> +#ifdef CONFIG_DM_USB
>>>>>>> +       device_remove(dev->usb_udev);
>>>>>>> +#else
>>>>>>>         board_usb_cleanup(0, USB_INIT_DEVICE);
>>>>>>> +#endif
>>>>>>
>>>>>> This doesn't look right to me. If your board is to be an Ethernet
>>>>>> device then it should do:
>>>>>>
>>>>>> uclass_first_device(UCLASS_ETH, &dev)
>>>>>>
>>>>>> to get the device. That could be in the device tree under the USB
>>>>>> node, or perhaps you want to have a setup function which manualy binds
>>>>>> the device, a bit like usb_find_and_bind_driver().
>>>>>>
>>>>>
>>>>> This patch is to get usb device for the ether gadget. It uses the same
>>>>> api with UCLASS_USB_DEV_GENERIC to get usb device. The patch hadn't done
>>>>> for eth driver model adoption.
>>>>
>>>> So can you do that one first, or is it coming soon?
>>>>
>>>
>>> Its already implemented above in the function dm_usb_init()
>>
>> So are you saying that the Ethernet 'USB device' driver needs to be
>> converted to driver model? Otherwise what stops us from using
>> UCLASS_ETH here?
> 
> I think the confusion might be that this is a USB gadget and it
> doesn't support ETH DM yet. This code needs lots of clean-up. It is
> still using the old Ethernet stack. This just makes the driver able to
> function if you have USB DM enabled.
> 
> At least that how I understand this patch.
> 

Yes, this patch adopts the driver to use DM_USB and still use only non
DM ETH. Patch 6/6 actually converts the driver to adopt DM_ETH.

Regards
Mugunthan V N
diff mbox

Patch

diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 497b981129..9bc61186cf 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -24,6 +24,10 @@ 
 #include "gadget_chips.h"
 #include "rndis.h"
 
+#include <dm.h>
+#include <dm/uclass-internal.h>
+#include <dm/device-internal.h>
+
 #define USB_NET_NAME "usb_ether"
 
 #define atomic_read
@@ -101,6 +105,9 @@  struct eth_dev {
 	struct usb_gadget	*gadget;
 	struct usb_request	*req;		/* for control responses */
 	struct usb_request	*stat_req;	/* for cdc & rndis status */
+#ifdef CONFIG_DM_USB
+	struct udevice		*usb_udev;
+#endif
 
 	u8			config;
 	struct usb_ep		*in_ep, *out_ep, *status_ep;
@@ -2303,6 +2310,24 @@  fail:
 
 /*-------------------------------------------------------------------------*/
 
+#ifdef CONFIG_DM_USB
+int dm_usb_init(struct eth_dev *e_dev)
+{
+	struct udevice *dev = NULL;
+	int ret;
+
+	ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
+	if (!dev || ret) {
+		error("No USB device found\n");
+		return -ENODEV;
+	}
+
+	e_dev->usb_udev = dev;
+
+	return ret;
+}
+#endif
+
 static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
 {
 	struct eth_dev *dev = &l_ethdev;
@@ -2315,7 +2340,14 @@  static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
 		goto fail;
 	}
 
+#ifdef CONFIG_DM_USB
+	if (dm_usb_init(dev)) {
+		error("USB ether not found\n");
+		return -ENODEV;
+	}
+#else
 	board_usb_init(0, USB_INIT_DEVICE);
+#endif
 
 	/* Configure default mac-addresses for the USB ethernet device */
 #ifdef CONFIG_USBNET_DEV_ADDR
@@ -2497,7 +2529,11 @@  void usb_eth_halt(struct eth_device *netdev)
 	}
 
 	usb_gadget_unregister_driver(&eth_driver);
+#ifdef CONFIG_DM_USB
+	device_remove(dev->usb_udev);
+#else
 	board_usb_cleanup(0, USB_INIT_DEVICE);
+#endif
 }
 
 static struct usb_gadget_driver eth_driver = {