[U-Boot] [PATCH 1/3] usbether: Fixed bug when using with PXA25X chips
Marek Vasut
marex at denx.de
Sat Aug 18 01:32:45 CEST 2012
Dear Łukasz Dałek,
> On 17.08.2012 22:48, Marek Vasut wrote:
> > Dear Łukasz Dałek,
> >
> >> PXA25X chips don't support alternate settings so code in ether.c
> >> disables usage of CDC.
> >> But only code defined between DEV_CONFIG_CDC signals that network is up.
> >> This patch is fixing this bug by addding pxa_connect_gadget() which on
> >> pxa25x chips signals that network is up and do nothing on any other
> >> chips.
> >
> > You're getting better, it's a good sign you're learning, I'm glad to see
> > it :-)
>
> It's my first big project in which I got involved so I'm ready for
> criticism.
>
> >> Signed-off-by: Łukasz Dałek<luk0104 at gmail.com>
> >> ---
> >>
> >> drivers/usb/gadget/ether.c | 21 ++++++++++++++++++++-
> >> 1 files changed, 20 insertions(+), 1 deletions(-)
> >>
> >> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
> >> index d975fb6..964fe2e 100644
> >> --- a/drivers/usb/gadget/ether.c
> >> +++ b/drivers/usb/gadget/ether.c
> >> @@ -44,7 +44,12 @@ extern struct platform_data brd;
> >>
> >> unsigned packet_received, packet_sent;
> >>
> >> -#define DEV_CONFIG_CDC 1
> >> +#ifdef CONFIG_USB_GADGET_PXA2XX
> >> +# undef DEV_CONFIG_CDC
> >> +# define DEV_CONFIG_SUBSET 1
> >
> > Can't we make it into a config value?
> >
> > Does this work for you:
> > 1) Add:
> > CONFIG_USB_ETH_SUBSET
> > CONFIG_USB_ETH_CDC
> >
> > 2) Change this to
> >
> > #if !defined(...SUBSET) || !defined(...CDC) || !defined(RNDIS)
> > #define DEV_CONFIG_CDC /* preserve default behavior */
> > #endif
> >
> > #if defined(...SUBSET)
> > #define DEV_CONFIG_SUBSET
> > #endif
> >
> > #if defined(...CDC)
> > #define DEV_CONFIG_CDC
> > #endif
> >
> > /* Note that RNDIS is already fixed */
>
> Ok.
>
> > -- FROM HERE IT GOES INTO DIFFERENT PATCH --
> >
> > 3) Replace DEV_CONFIG_CDC with CONFIG_USB_ETH_CDC, remove the last #if
> > defined above
>
> Which one #if? That one I'd define in previous patch?
Yes, continuous rework so you avoid breakage and keep this bisectable.
> > 4) DTTO for SUBSET
> >
> > 5) define SUBSET in your header file
>
> In my board's header file?
Yes
> >> +#else
> >> +# define DEV_CONFIG_CDC 1
> >> +#endif
> >>
> >> #define GFP_ATOMIC ((gfp_t) 0)
> >> #define GFP_KERNEL ((gfp_t) 0)
> >>
> >> @@ -864,7 +869,9 @@ static struct usb_gadget_strings stringtab = {
> >>
> >> /*====================================================================
> >> ====
> >>
> >> ====*/ static u8 control_req[USB_BUFSIZ];
> >> +#if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS)
> >>
> >> static u8 status_req[STATUS_BYTECOUNT] __attribute__ ((aligned(4)));
> >>
> >> +#endif
> >
> > What trouble do you face here?
> >
> > Tom, this aligned(4) doesn't look correct, some ALLOC_ALIGNED or friend
> > would help here, right ? :)
>
> If you don't define DEV_CONFIG_CDC nor ...RNDIS and define
> DEV_CONFIG_SUBSET then it won't compile (because of STATUS_BYTECOUNT).
Fix STATUS_BYTECOUNT then. Why is status_req global at all?
> >> /**
> >>
> >> @@ -1252,6 +1259,17 @@ static void rndis_command_complete(struct usb_ep
> >> *ep, struct usb_request *req)
> >>
> >> #endif /* RNDIS */
> >>
> >> +#ifdef CONFIG_USB_GADGET_PXA2XX
> >> +static inline void pxa_connect_gadget(void)
> >> +{
> >> + debug("PXA connecting gadget...\n");
> >> + l_ethdev.network_started = 1;
> >> + printf("USB network up!\n");
> >
> > Definitelly not printf(), but is this really PXA specific or is this part
> > of the CDC subset goo?
>
> I've took pattern from code in this file. What should I use instead of
> printf?
debug() ? I guess we can wrap that function directly into the code anyway and
drop all the debug output in it altogether, boiling it down only to
l_ethdev.network_started = 1;
> CDC subset disable some code for PXA which signalise that network was
> started (l_ethdev... = 1) so this is quick-fix for this bug.
This is really sad :-(
> Łukasz Dałek
Best regards,
Marek Vasut
More information about the U-Boot
mailing list