mbox series

[0/2] am335x_boneblack: Enable fastboot flash support

Message ID 20180227214504.32572-1-semen.protsenko@linaro.org
Headers show
Series am335x_boneblack: Enable fastboot flash support | expand

Message

Sam Protsenko Feb. 27, 2018, 9:45 p.m. UTC
Standard and recommended way to upgrade the firmware is DFU. But DFU has
extremely low transmission speed (around 150 KiB/sec), thus it's a bad
fit for flashing big images (like rootfs). Low DFU speed is mostly due to
next reasons (kudos to Ruslan Bilovol for investigation):
 1. DFU works only via EP0, per DFU specification [1]. But AM335x
    doesn't have DMA for EP0, according to AM335x TRM [2]: from
    section 16.2:

      "The CPPI DMA can be used to service Endpoints 1 to 15 not
       Endpoint 0. CPU access method is used to service Endpoint 0
       transactions."

 2. Max transmission packet size via EP0 is 64 bytes, whereas for other
    endpoints max transmission packet size is 512 bytes

fastboot specification [3], on the other hand, says nothing about which
EP should be used (and I see that EP1 is used on BBB board). So let's
enable fastboot flash support on BeagleBone Black board to provide a
better way to flash big images via USB.

[1] www.usb.org/developers/docs/devclass_docs/DFU_1.1.pdf
[2] www.ti.com/lit/ug/spruh73p/spruh73p.pdf
[3] https://android.googlesource.com/platform/system/core/+/master/fastboot/README.md

Sam Protsenko (2):
  omap: Fix AM335x build with enabled fastboot flash
  configs: am335x_boneblack: Enable fastboot flash capability

 arch/arm/mach-omap2/utils.c        | 2 ++
 configs/am335x_boneblack_defconfig | 2 ++
 2 files changed, 4 insertions(+)

Comments

Lukasz Majewski Feb. 27, 2018, 9:56 p.m. UTC | #1
Hi Sam,

> Standard and recommended way to upgrade the firmware is DFU. But DFU

> has extremely low transmission speed (around 150 KiB/sec), thus it's

> a bad fit for flashing big images (like rootfs). Low DFU speed is

> mostly due to next reasons (kudos to Ruslan Bilovol for

> investigation): 1. DFU works only via EP0, per DFU specification [1].

> But AM335x doesn't have DMA for EP0, according to AM335x TRM [2]: from

>     section 16.2:

> 

>       "The CPPI DMA can be used to service Endpoints 1 to 15 not

>        Endpoint 0. CPU access method is used to service Endpoint 0

>        transactions."

> 

>  2. Max transmission packet size via EP0 is 64 bytes, whereas for

> other endpoints max transmission packet size is 512 bytes


DFU was (and still is) supposed to work on all devices - even those
with very tiny resources (like st microcontrollers).

According to USB spec, EP0 is mandatory, so that is the reason for
using it as a common denominator.

Just for the record - fastboot is one of the options here. 

For BBB you may want to look at "dfu tftp" - which uses ETH's tftp
protocol with dfu backend. It is supposed to be a remedy for problem
described above.

More information at:
./doc/README.dfutftp


Of course I also don't mind using fastboot - it depends on your use
case.

> 

> fastboot specification [3], on the other hand, says nothing about

> which EP should be used (and I see that EP1 is used on BBB board). So

> let's enable fastboot flash support on BeagleBone Black board to

> provide a better way to flash big images via USB.

> 

> [1] www.usb.org/developers/docs/devclass_docs/DFU_1.1.pdf

> [2] www.ti.com/lit/ug/spruh73p/spruh73p.pdf

> [3]

> https://android.googlesource.com/platform/system/core/+/master/fastboot/README.md

> 

> Sam Protsenko (2):

>   omap: Fix AM335x build with enabled fastboot flash

>   configs: am335x_boneblack: Enable fastboot flash capability

> 

>  arch/arm/mach-omap2/utils.c        | 2 ++

>  configs/am335x_boneblack_defconfig | 2 ++

>  2 files changed, 4 insertions(+)

> 





Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
Sam Protsenko Feb. 27, 2018, 11:38 p.m. UTC | #2
On 27 February 2018 at 23:56, Lukasz Majewski <lukma@denx.de> wrote:
> Hi Sam,
>
>> Standard and recommended way to upgrade the firmware is DFU. But DFU
>> has extremely low transmission speed (around 150 KiB/sec), thus it's
>> a bad fit for flashing big images (like rootfs). Low DFU speed is
>> mostly due to next reasons (kudos to Ruslan Bilovol for
>> investigation): 1. DFU works only via EP0, per DFU specification [1].
>> But AM335x doesn't have DMA for EP0, according to AM335x TRM [2]: from
>>     section 16.2:
>>
>>       "The CPPI DMA can be used to service Endpoints 1 to 15 not
>>        Endpoint 0. CPU access method is used to service Endpoint 0
>>        transactions."
>>
>>  2. Max transmission packet size via EP0 is 64 bytes, whereas for
>> other endpoints max transmission packet size is 512 bytes
>
> DFU was (and still is) supposed to work on all devices - even those
> with very tiny resources (like st microcontrollers).
>
> According to USB spec, EP0 is mandatory, so that is the reason for
> using it as a common denominator.
>
> Just for the record - fastboot is one of the options here.
>
> For BBB you may want to look at "dfu tftp" - which uses ETH's tftp
> protocol with dfu backend. It is supposed to be a remedy for problem
> described above.
>
> More information at:
> ./doc/README.dfutftp
>

Thank you for the explanation, Lukasz! Didn't know that "dfu tftp" was
designed to overcome that slow speed issue. Will try that.

>
> Of course I also don't mind using fastboot - it depends on your use
> case.
>

Yes, I'm trying to make BBB board to be a good educational platform
(we are working on some corporate courses). Main points are it's an
open hardware, has a good support in upstream and has a good pricing.
Anyway, my idea is to show people all the conventional methods for
flashing the board, so I need both Ethernet and USB ways working.

Also, I noticed that Debian rootfs is recommended to be flashed to
eMMC using SD card (and flashing is done from booted system, not from
U-Boot). Although I understand that this may be easier for an end user
(as it closely resembles PC way), still I can't say that I
particularly like or approve that method (especially for development
purposes). That's why I think that having functional USB link would be
beneficial for BBB.

>>
>> fastboot specification [3], on the other hand, says nothing about
>> which EP should be used (and I see that EP1 is used on BBB board). So
>> let's enable fastboot flash support on BeagleBone Black board to
>> provide a better way to flash big images via USB.
>>
>> [1] www.usb.org/developers/docs/devclass_docs/DFU_1.1.pdf
>> [2] www.ti.com/lit/ug/spruh73p/spruh73p.pdf
>> [3]
>> https://android.googlesource.com/platform/system/core/+/master/fastboot/README.md
>>
>> Sam Protsenko (2):
>>   omap: Fix AM335x build with enabled fastboot flash
>>   configs: am335x_boneblack: Enable fastboot flash capability
>>
>>  arch/arm/mach-omap2/utils.c        | 2 ++
>>  configs/am335x_boneblack_defconfig | 2 ++
>>  2 files changed, 4 insertions(+)
>>
>
>
>
>
> Best regards,
>
> Lukasz Majewski
>
> --
>
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
Lukasz Majewski Feb. 27, 2018, 11:54 p.m. UTC | #3
Hi Sam,

> On 27 February 2018 at 23:56, Lukasz Majewski <lukma@denx.de> wrote:

> > Hi Sam,

> >  

> >> Standard and recommended way to upgrade the firmware is DFU. But

> >> DFU has extremely low transmission speed (around 150 KiB/sec),

> >> thus it's a bad fit for flashing big images (like rootfs). Low DFU

> >> speed is mostly due to next reasons (kudos to Ruslan Bilovol for

> >> investigation): 1. DFU works only via EP0, per DFU specification

> >> [1]. But AM335x doesn't have DMA for EP0, according to AM335x TRM

> >> [2]: from section 16.2:

> >>

> >>       "The CPPI DMA can be used to service Endpoints 1 to 15 not

> >>        Endpoint 0. CPU access method is used to service Endpoint 0

> >>        transactions."

> >>

> >>  2. Max transmission packet size via EP0 is 64 bytes, whereas for

> >> other endpoints max transmission packet size is 512 bytes  

> >

> > DFU was (and still is) supposed to work on all devices - even those

> > with very tiny resources (like st microcontrollers).

> >

> > According to USB spec, EP0 is mandatory, so that is the reason for

> > using it as a common denominator.

> >

> > Just for the record - fastboot is one of the options here.

> >

> > For BBB you may want to look at "dfu tftp" - which uses ETH's tftp

> > protocol with dfu backend. It is supposed to be a remedy for problem

> > described above.

> >

> > More information at:

> > ./doc/README.dfutftp

> >  

> 

> Thank you for the explanation, Lukasz! Didn't know that "dfu tftp" was

> designed to overcome that slow speed issue. Will try that.


You may also want to try UMS (USB Mass Storage) - "ums".

It will export your BBB to be visible as USB Mass Storage device (like
a pendrive).

From that point you can use dd to write MBR, rootfs, u-boot to it.


Another - good option for flashing is SWUpdate SW:

https://github.com/sbabic/swupdate

It allows very easy integration with OE/Yocto and Buildroot.
What is even more important - it supports BBB out of the box:

https://github.com/sbabic/meta-swupdate-boards/tree/master/recipes-support/swupdate/swupdate

SWUpdate is a versatile tool with a loot of nice features - please read:
https://sbabic.github.io/swupdate/

> 

> >

> > Of course I also don't mind using fastboot - it depends on your use

> > case.

> >  

> 

> Yes, I'm trying to make BBB board to be a good educational platform

> (we are working on some corporate courses). Main points are it's an

> open hardware, has a good support in upstream and has a good pricing.

> Anyway, my idea is to show people all the conventional methods for

> flashing the board, so I need both Ethernet and USB ways working.

> 

> Also, I noticed that Debian rootfs is recommended to be flashed to

> eMMC using SD card (and flashing is done from booted system, not from

> U-Boot). Although I understand that this may be easier for an end user

> (as it closely resembles PC way), still I can't say that I

> particularly like or approve that method (especially for development

> purposes). That's why I think that having functional USB link would be

> beneficial for BBB.

> 

> >>

> >> fastboot specification [3], on the other hand, says nothing about

> >> which EP should be used (and I see that EP1 is used on BBB board).

> >> So let's enable fastboot flash support on BeagleBone Black board to

> >> provide a better way to flash big images via USB.

> >>

> >> [1] www.usb.org/developers/docs/devclass_docs/DFU_1.1.pdf

> >> [2] www.ti.com/lit/ug/spruh73p/spruh73p.pdf

> >> [3]

> >> https://android.googlesource.com/platform/system/core/+/master/fastboot/README.md

> >>

> >> Sam Protsenko (2):

> >>   omap: Fix AM335x build with enabled fastboot flash

> >>   configs: am335x_boneblack: Enable fastboot flash capability

> >>

> >>  arch/arm/mach-omap2/utils.c        | 2 ++

> >>  configs/am335x_boneblack_defconfig | 2 ++

> >>  2 files changed, 4 insertions(+)

> >>  

> >

> >

> >

> >

> > Best regards,

> >

> > Lukasz Majewski

> >

> > --

> >

> > DENX Software Engineering GmbH,      Managing Director: Wolfgang

> > Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell,

> > Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email:

> > wd@denx.de  





Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de