iMX8MM USB support?

Peng,
It looks like IMX8MM USB support hasn't made it upstream yet. Is this something your working on?
I'm interested in booting an IMX8MM via SDP.
Best Regards,
Tim

+ Sherry, as he was working on iMX8* USB support
On Wed, Apr 1, 2020, 20:55 Tim Harvey tharvey@gateworks.com wrote:
Peng,
It looks like IMX8MM USB support hasn't made it upstream yet. Is this something your working on?
I'm interested in booting an IMX8MM via SDP.
Best Regards,
Tim

Hi Igor,
I’m sorry, now I don’t do the jobs about USB any more. Maybe Peng know who can help you.
Best regards Sherry Sun
From: Igor Opaniuk igor.opaniuk@gmail.com Sent: 2020年4月2日 5:35 To: Sherry Sun sherry.sun@nxp.com Cc: u-boot u-boot@lists.denx.de; Fabio Estevam festevam@gmail.com; Peng Fan peng.fan@nxp.com; tharvey@gateworks.com Subject: Re: iMX8MM USB support?
+ Sherry, as he was working on iMX8* USB support
On Wed, Apr 1, 2020, 20:55 Tim Harvey <tharvey@gateworks.commailto:tharvey@gateworks.com> wrote: Peng,
It looks like IMX8MM USB support hasn't made it upstream yet. Is this something your working on?
I'm interested in booting an IMX8MM via SDP.
Best Regards,
Tim

Hi Tim,
On 01.04.20 19:55, Tim Harvey wrote:
Peng,
It looks like IMX8MM USB support hasn't made it upstream yet. Is this something your working on?
I'm interested in booting an IMX8MM via SDP.
If I remember correctly, the main issue is that the ci_udc driver is missing DM support. See here: [1].
I have pulled some patches/hacks into our tree to make SDP work, at least without DM [2].
If someone could come up with a proper solution for upstream that would be great and I would be happy to review/test.
[1] http://u-boot.10912.n7.nabble.com/DM-for-ci-udc-td368249.html#a370228 [2] https://git.kontron-electronics.de/linux/u-boot/-/commits/v2020.01-ktn
Thanks, Frieder

On Mon, Apr 6, 2020 at 2:43 AM Schrempf Frieder frieder.schrempf@kontron.de wrote:
Hi Tim,
On 01.04.20 19:55, Tim Harvey wrote:
Peng,
It looks like IMX8MM USB support hasn't made it upstream yet. Is this something your working on?
I'm interested in booting an IMX8MM via SDP.
If I remember correctly, the main issue is that the ci_udc driver is missing DM support. See here: [1].
I have pulled some patches/hacks into our tree to make SDP work, at least without DM [2].
If someone could come up with a proper solution for upstream that would be great and I would be happy to review/test.
[1] http://u-boot.10912.n7.nabble.com/DM-for-ci-udc-td368249.html#a370228 [2] https://git.kontron-electronics.de/linux/u-boot/-/commits/v2020.01-ktn
Frieder,
Thanks - this was very helpful! After applying the patches adding IMX8MM USB I can boot the EVK SPL via SDP and get it to transition over to providing a gadget at 0525:c4a4 but when I try to load u-boot.img to that it fails with a header not found error:
sudo ../imx_usb_loader/imx_usb u-boot.imx; sleep 2; sudo ../imx_usb_loader/imx_usb u-boot.img config file <../imx_usb_loader//imx_usb.conf> ... vid=0x1fc9 pid=0x0134 file_name=mx8mm_usb_work.conf ... config file <../imx_usb_loader//mx8mm_usb_work.conf> parse ../imx_usb_loader//mx8mm_usb_work.conf Trying to open device vid=0x1fc9 pid=0x0134 Interface 0 claimed HAB security state: development mode (0x56787856) == work item filename u-boot.imx load_size 0 bytes load_addr 0x00000000 dcd 1 clear_dcd 0 plug 1 jump_mode 3 jump_addr 0x00000000 == end work item No DCD table
loading binary file(u-boot.imx) to 007e0fc0, skip=0, fsize=37600 type=aa
<<<226816, 226816 bytes>>> succeeded (security 0x56787856, status 0x88888888) jumping to 0x007e0fc0 config file <../imx_usb_loader//imx_usb.conf> ... config file <../imx_usb_loader//mx8mm_usb_sdp_spl.conf> parse ../imx_usb_loader//mx8mm_usb_sdp_spl.conf Trying to open device vid=0x0525 pid=0xc4a4 Interface 0 claimed HAB security state: development mode (0x56787856) == work item filename u-boot.img load_size 0 bytes load_addr 0x00000000 dcd 1 clear_dcd 0 plug 1 jump_mode 3 jump_addr 0x00000000 == end work item header not found 8400:91000694, 4000 do_download failed, err=-22 HAB security state: development mode (0x56787856)
Note I had to add a line to imx_usb.conf to map 0525:c4a4 to mx8mm_usb_sdp_spl.conf: diff --git a/imx_usb.conf b/imx_usb.conf index c7c00f6..4d89230 100644 --- a/imx_usb.conf +++ b/imx_usb.conf @@ -17,6 +17,7 @@ 0x066f:0x37ff, linux_gadget.conf 0x1b67:0x4fff, mx6_usb_sdp_spl.conf 0x0525:0xb4a4, mx6_usb_sdp_spl.conf +0x0525:0xc4a4, mx8mm_usb_sdp_spl.conf 0x1fc9:0x012b, mx8mq_usb_work.conf 0x1fc9:0x0134, mx8mm_usb_work.conf 0x1fc9:0x013e, mx8mn_usb_work.conf
Do you know what's missing from u-boot.img?
Best Regards,
Tim

Hi Tim,
On 07.04.20 19:06, Tim Harvey wrote:
On Mon, Apr 6, 2020 at 2:43 AM Schrempf Frieder frieder.schrempf@kontron.de wrote:
Hi Tim,
On 01.04.20 19:55, Tim Harvey wrote:
Peng,
It looks like IMX8MM USB support hasn't made it upstream yet. Is this something your working on?
I'm interested in booting an IMX8MM via SDP.
If I remember correctly, the main issue is that the ci_udc driver is missing DM support. See here: [1].
I have pulled some patches/hacks into our tree to make SDP work, at least without DM [2].
If someone could come up with a proper solution for upstream that would be great and I would be happy to review/test.
[1] https://eur04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fu-boot.1091... [2] https://eur04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.kontro...
Frieder,
Thanks - this was very helpful! After applying the patches adding IMX8MM USB I can boot the EVK SPL via SDP and get it to transition over to providing a gadget at 0525:c4a4 but when I try to load u-boot.img to that it fails with a header not found error:
sudo ../imx_usb_loader/imx_usb u-boot.imx; sleep 2; sudo ../imx_usb_loader/imx_usb u-boot.img config file <../imx_usb_loader//imx_usb.conf> ... vid=0x1fc9 pid=0x0134 file_name=mx8mm_usb_work.conf ... config file <../imx_usb_loader//mx8mm_usb_work.conf> parse ../imx_usb_loader//mx8mm_usb_work.conf Trying to open device vid=0x1fc9 pid=0x0134 Interface 0 claimed HAB security state: development mode (0x56787856) == work item filename u-boot.imx load_size 0 bytes load_addr 0x00000000 dcd 1 clear_dcd 0 plug 1 jump_mode 3 jump_addr 0x00000000 == end work item No DCD table
loading binary file(u-boot.imx) to 007e0fc0, skip=0, fsize=37600 type=aa
<<<226816, 226816 bytes>>> succeeded (security 0x56787856, status 0x88888888) jumping to 0x007e0fc0 config file <../imx_usb_loader//imx_usb.conf> ... config file <../imx_usb_loader//mx8mm_usb_sdp_spl.conf> parse ../imx_usb_loader//mx8mm_usb_sdp_spl.conf Trying to open device vid=0x0525 pid=0xc4a4 Interface 0 claimed HAB security state: development mode (0x56787856) == work item filename u-boot.img load_size 0 bytes load_addr 0x00000000 dcd 1 clear_dcd 0 plug 1 jump_mode 3 jump_addr 0x00000000 == end work item header not found 8400:91000694, 4000 do_download failed, err=-22 HAB security state: development mode (0x56787856)
Note I had to add a line to imx_usb.conf to map 0525:c4a4 to mx8mm_usb_sdp_spl.conf: diff --git a/imx_usb.conf b/imx_usb.conf index c7c00f6..4d89230 100644 --- a/imx_usb.conf +++ b/imx_usb.conf @@ -17,6 +17,7 @@ 0x066f:0x37ff, linux_gadget.conf 0x1b67:0x4fff, mx6_usb_sdp_spl.conf 0x0525:0xb4a4, mx6_usb_sdp_spl.conf +0x0525:0xc4a4, mx8mm_usb_sdp_spl.conf 0x1fc9:0x012b, mx8mq_usb_work.conf 0x1fc9:0x0134, mx8mm_usb_work.conf 0x1fc9:0x013e, mx8mn_usb_work.conf
Do you know what's missing from u-boot.img?
In my case I'm loading a FIT image, so things are a bit different. Where are you loading the image to?
I have the following line in mx8mm_usb_sdp_spl.conf to load my FIT image to DDR and jump to it:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
Best Regards, Frieder

On Wed, Apr 8, 2020 at 12:35 AM Schrempf Frieder frieder.schrempf@kontron.de wrote:
Hi Tim,
On 07.04.20 19:06, Tim Harvey wrote:
On Mon, Apr 6, 2020 at 2:43 AM Schrempf Frieder frieder.schrempf@kontron.de wrote:
Hi Tim,
On 01.04.20 19:55, Tim Harvey wrote:
Peng,
It looks like IMX8MM USB support hasn't made it upstream yet. Is this something your working on?
I'm interested in booting an IMX8MM via SDP.
If I remember correctly, the main issue is that the ci_udc driver is missing DM support. See here: [1].
I have pulled some patches/hacks into our tree to make SDP work, at least without DM [2].
If someone could come up with a proper solution for upstream that would be great and I would be happy to review/test.
[1] https://eur04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fu-boot.1091... [2] https://eur04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.kontro...
Frieder,
Thanks - this was very helpful! After applying the patches adding IMX8MM USB I can boot the EVK SPL via SDP and get it to transition over to providing a gadget at 0525:c4a4 but when I try to load u-boot.img to that it fails with a header not found error:
sudo ../imx_usb_loader/imx_usb u-boot.imx; sleep 2; sudo ../imx_usb_loader/imx_usb u-boot.img config file <../imx_usb_loader//imx_usb.conf> ... vid=0x1fc9 pid=0x0134 file_name=mx8mm_usb_work.conf ... config file <../imx_usb_loader//mx8mm_usb_work.conf> parse ../imx_usb_loader//mx8mm_usb_work.conf Trying to open device vid=0x1fc9 pid=0x0134 Interface 0 claimed HAB security state: development mode (0x56787856) == work item filename u-boot.imx load_size 0 bytes load_addr 0x00000000 dcd 1 clear_dcd 0 plug 1 jump_mode 3 jump_addr 0x00000000 == end work item No DCD table
loading binary file(u-boot.imx) to 007e0fc0, skip=0, fsize=37600 type=aa
<<<226816, 226816 bytes>>> succeeded (security 0x56787856, status 0x88888888) jumping to 0x007e0fc0 config file <../imx_usb_loader//imx_usb.conf> ... config file <../imx_usb_loader//mx8mm_usb_sdp_spl.conf> parse ../imx_usb_loader//mx8mm_usb_sdp_spl.conf Trying to open device vid=0x0525 pid=0xc4a4 Interface 0 claimed HAB security state: development mode (0x56787856) == work item filename u-boot.img load_size 0 bytes load_addr 0x00000000 dcd 1 clear_dcd 0 plug 1 jump_mode 3 jump_addr 0x00000000 == end work item header not found 8400:91000694, 4000 do_download failed, err=-22 HAB security state: development mode (0x56787856)
Note I had to add a line to imx_usb.conf to map 0525:c4a4 to mx8mm_usb_sdp_spl.conf: diff --git a/imx_usb.conf b/imx_usb.conf index c7c00f6..4d89230 100644 --- a/imx_usb.conf +++ b/imx_usb.conf @@ -17,6 +17,7 @@ 0x066f:0x37ff, linux_gadget.conf 0x1b67:0x4fff, mx6_usb_sdp_spl.conf 0x0525:0xb4a4, mx6_usb_sdp_spl.conf +0x0525:0xc4a4, mx8mm_usb_sdp_spl.conf 0x1fc9:0x012b, mx8mq_usb_work.conf 0x1fc9:0x0134, mx8mm_usb_work.conf 0x1fc9:0x013e, mx8mn_usb_work.conf
Do you know what's missing from u-boot.img?
In my case I'm loading a FIT image, so things are a bit different. Where are you loading the image to?
I have the following line in mx8mm_usb_sdp_spl.conf to load my FIT image to DDR and jump to it:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
Frieder,
I was trying to load u-boot.img
The SPL boots fine: U-Boot SPL 2020.01-00029-g5ad7797 (Apr 08 2020 - 08:16:53 -0700) read error from device: 9310b8 register: x!Normal Boot Trying to boot from USB SDP SDP: initialize... SDP: handle requests..
But when I 'imx_usb u-boot.img' it complains there is no header on u-boot.img. I enabled FIT generation and attempted to 'imx_usb u-boot.itb' but imx_usb still complains about no header found.
My mx8mm_usb_sdp_spl.conf loooks like this: mx8mm_spl_sdp #hid/bulk,[old_header,]max packet size, {ram start, ram size}(repeat valid ram areas) #In SPL, we typically load u-boot.img which has a U-boot header... hid,1024,0x910000,0x40000000,1G,0x00900000,0x40000
#0x60000 - 0x8400 = 0x57c00, +0x3000=5ac00 (FIT image) ../u-boot-imx6/u-boot.bin:load 0x40200000 ../u-boot-imx6/bl31-iMX8MM.bin:load 0x00920000,jump 0x920000
What does your mx8mm_usb_sdp_spl.conf look like? I must admit I don't really understand how these are configured.
Thanks,
Tim

On 08.04.20 17:31, Tim Harvey wrote: [...]
In my case I'm loading a FIT image, so things are a bit different. Where are you loading the image to?
I have the following line in mx8mm_usb_sdp_spl.conf to load my FIT image to DDR and jump to it:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
Frieder,
I was trying to load u-boot.img
The SPL boots fine: U-Boot SPL 2020.01-00029-g5ad7797 (Apr 08 2020 - 08:16:53 -0700) read error from device: 9310b8 register: x!Normal Boot Trying to boot from USB SDP SDP: initialize... SDP: handle requests..
But when I 'imx_usb u-boot.img' it complains there is no header on u-boot.img. I enabled FIT generation and attempted to 'imx_usb u-boot.itb' but imx_usb still complains about no header found.
My mx8mm_usb_sdp_spl.conf loooks like this: mx8mm_spl_sdp #hid/bulk,[old_header,]max packet size, {ram start, ram size}(repeat valid ram areas) #In SPL, we typically load u-boot.img which has a U-boot header... hid,1024,0x910000,0x40000000,1G,0x00900000,0x40000
#0x60000 - 0x8400 = 0x57c00, +0x3000=5ac00 (FIT image) ../u-boot-imx6/u-boot.bin:load 0x40200000 ../u-boot-imx6/bl31-iMX8MM.bin:load 0x00920000,jump 0x920000
What does your mx8mm_usb_sdp_spl.conf look like? I must admit I don't really understand how these are configured.
It looks just like yours except that I have a single instruction as already stated above:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
and I'm loading the FIT image by running './imx_usb' without arguments.
As imx_usb_loader can't parse FIT image headers, I use 'jump_direct' to jump to the raw image entry point and let SPL parse the FIT. I think in that case imx_usb_loader shouldn't complain about a missing header.

On Thu, Apr 9, 2020 at 3:02 AM Schrempf Frieder frieder.schrempf@kontron.de wrote:
On 08.04.20 17:31, Tim Harvey wrote: [...]
In my case I'm loading a FIT image, so things are a bit different. Where are you loading the image to?
I have the following line in mx8mm_usb_sdp_spl.conf to load my FIT image to DDR and jump to it:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
Frieder,
I was trying to load u-boot.img
The SPL boots fine: U-Boot SPL 2020.01-00029-g5ad7797 (Apr 08 2020 - 08:16:53 -0700) read error from device: 9310b8 register: x!Normal Boot Trying to boot from USB SDP SDP: initialize... SDP: handle requests..
But when I 'imx_usb u-boot.img' it complains there is no header on u-boot.img. I enabled FIT generation and attempted to 'imx_usb u-boot.itb' but imx_usb still complains about no header found.
My mx8mm_usb_sdp_spl.conf loooks like this: mx8mm_spl_sdp #hid/bulk,[old_header,]max packet size, {ram start, ram size}(repeat valid ram areas) #In SPL, we typically load u-boot.img which has a U-boot header... hid,1024,0x910000,0x40000000,1G,0x00900000,0x40000
#0x60000 - 0x8400 = 0x57c00, +0x3000=5ac00 (FIT image) ../u-boot-imx6/u-boot.bin:load 0x40200000 ../u-boot-imx6/bl31-iMX8MM.bin:load 0x00920000,jump 0x920000
What does your mx8mm_usb_sdp_spl.conf look like? I must admit I don't really understand how these are configured.
It looks just like yours except that I have a single instruction as already stated above:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
and I'm loading the FIT image by running './imx_usb' without arguments.
As imx_usb_loader can't parse FIT image headers, I use 'jump_direct' to jump to the raw image entry point and let SPL parse the FIT. I think in that case imx_usb_loader shouldn't complain about a missing header.
Frieder,
Ok, I finally understand. Using 'imx_usb <file>' which is what I was doing is not the same as loading it via the conf file and was why it was looking for a header.
So now that I'm using the imx_usb.conf files fully instead It's loading u-boot.itb and jumping but unfortunately I'm still not quite there.
Here's what I'm seeing:
U-Boot SPL 2020.01-00029-g6529a03-dirty (Apr 09 2020 - 13:02:21 -0700) Normal Boot Trying to boot from USB SDP SDP: initialize... SDP: handle requests... Downloading file of size 584020 to 0x40200000... done Jumping to header at 0x40200000 Header Tag is not an IMX image
Is the 'Header Tag' message normal? From adding some debugging it appears to matching the dts name in my board_fit_config_name_match and parsing the FIT image, loading the ATF and jumping but then I get nothing. What would I expect at this point and do you have any troubleshooting tips?
Thanks,
Tim

On Thu, Apr 9, 2020 at 2:45 PM Tim Harvey tharvey@gateworks.com wrote:
On Thu, Apr 9, 2020 at 3:02 AM Schrempf Frieder frieder.schrempf@kontron.de wrote:
On 08.04.20 17:31, Tim Harvey wrote: [...]
In my case I'm loading a FIT image, so things are a bit different. Where are you loading the image to?
I have the following line in mx8mm_usb_sdp_spl.conf to load my FIT image to DDR and jump to it:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
Frieder,
I was trying to load u-boot.img
The SPL boots fine: U-Boot SPL 2020.01-00029-g5ad7797 (Apr 08 2020 - 08:16:53 -0700) read error from device: 9310b8 register: x!Normal Boot Trying to boot from USB SDP SDP: initialize... SDP: handle requests..
But when I 'imx_usb u-boot.img' it complains there is no header on u-boot.img. I enabled FIT generation and attempted to 'imx_usb u-boot.itb' but imx_usb still complains about no header found.
My mx8mm_usb_sdp_spl.conf loooks like this: mx8mm_spl_sdp #hid/bulk,[old_header,]max packet size, {ram start, ram size}(repeat valid ram areas) #In SPL, we typically load u-boot.img which has a U-boot header... hid,1024,0x910000,0x40000000,1G,0x00900000,0x40000
#0x60000 - 0x8400 = 0x57c00, +0x3000=5ac00 (FIT image) ../u-boot-imx6/u-boot.bin:load 0x40200000 ../u-boot-imx6/bl31-iMX8MM.bin:load 0x00920000,jump 0x920000
What does your mx8mm_usb_sdp_spl.conf look like? I must admit I don't really understand how these are configured.
It looks just like yours except that I have a single instruction as already stated above:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
and I'm loading the FIT image by running './imx_usb' without arguments.
As imx_usb_loader can't parse FIT image headers, I use 'jump_direct' to jump to the raw image entry point and let SPL parse the FIT. I think in that case imx_usb_loader shouldn't complain about a missing header.
Frieder,
Ok, I finally understand. Using 'imx_usb <file>' which is what I was doing is not the same as loading it via the conf file and was why it was looking for a header.
So now that I'm using the imx_usb.conf files fully instead It's loading u-boot.itb and jumping but unfortunately I'm still not quite there.
Here's what I'm seeing:
U-Boot SPL 2020.01-00029-g6529a03-dirty (Apr 09 2020 - 13:02:21 -0700) Normal Boot Trying to boot from USB SDP SDP: initialize... SDP: handle requests... Downloading file of size 584020 to 0x40200000... done Jumping to header at 0x40200000 Header Tag is not an IMX image
Is the 'Header Tag' message normal? From adding some debugging it appears to matching the dts name in my board_fit_config_name_match and parsing the FIT image, loading the ATF and jumping but then I get nothing. What would I expect at this point and do you have any troubleshooting tips?
Frieder,
My issue was that I forgot to set ATF_LOAD_ADDR=0x920000!
So I'm running now, booting imx8mm-evk via SDP using your USB patches and imx_usb configuration.
Thank you for your help!
Tim

Hi Tim and Schrempf,
On Fri, Apr 10, 2020 at 3:37 PM Tim Harvey tharvey@gateworks.com wrote:
Frieder,
My issue was that I forgot to set ATF_LOAD_ADDR=0x920000!
So I'm running now, booting imx8mm-evk via SDP using your USB patches and imx_usb configuration.
Sorry for resurrecting such an old thread.
I am trying to accomplish the same here: boot imx8mm-evk via SDP.
I tried building Schremp's U-Boot from https://git.kontron-electronics.de/linux/u-boot/-/commits/v2020.01-ktn with the additional changes:
--- a/configs/imx8mm_evk_defconfig +++ b/configs/imx8mm_evk_defconfig @@ -85,3 +85,14 @@ CONFIG_MXC_UART=y CONFIG_SYSRESET=y CONFIG_SYSRESET_PSCI=y CONFIG_DM_THERMAL=y +CONFIG_SPL_USB_HOST_SUPPORT=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_USB_SDP_SUPPORT=y +CONFIG_SPL_WATCHDOG_SUPPORT=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="FSL" +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 +CONFIG_CI_UDC=y diff --git a/include/configs/imx8mm_evk.h b/include/configs/imx8mm_evk.h index 991fe0056c4a..d41704d60754 100644 --- a/include/configs/imx8mm_evk.h +++ b/include/configs/imx8mm_evk.h @@ -35,6 +35,11 @@
#endif
+#define CONFIG_EHCI_HCD_INIT_AFTER_RESET +#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) +#define CONFIG_MXC_USB_FLAGS 0 +#define CONFIG_USB_MAX_CONTROLLER_COUNT 2 + /* Initial environment variables */ #define CONFIG_EXTRA_ENV_SETTINGS \ "script=boot.scr\0" \
but I get the following error:
U-Boot SPL 2020.01-01059-geb5a1eb17cea-dirty (Jul 01 2021 - 19:45:58 -0300) Normal Boot WDT: Not found! SPL: Unsupported Boot Device! SPL: failed to boot from all boot devices ### ERROR ### Please RESET the board ###
Tim,
Do you still have the imx8mm-evk patches and mx8mm_usb_sdp_spl.conf that you used?
This version of U-Boot does not generate u-boot.itb by default, so I passed the following line in mx8mm_usb_sdp_spl.conf:
.../u-boot/flash.bin:dcd,clear_dcd,plug,jump header
Any help is appreciated.
I plan to upstream this support once I get it resolved.
Thanks,
Fabio Estevam

On Thu, Jul 1, 2021 at 4:15 PM Fabio Estevam festevam@gmail.com wrote:
Hi Tim and Schrempf,
On Fri, Apr 10, 2020 at 3:37 PM Tim Harvey tharvey@gateworks.com wrote:
Frieder,
My issue was that I forgot to set ATF_LOAD_ADDR=0x920000!
So I'm running now, booting imx8mm-evk via SDP using your USB patches and imx_usb configuration.
Sorry for resurrecting such an old thread.
I am trying to accomplish the same here: boot imx8mm-evk via SDP.
I tried building Schremp's U-Boot from https://git.kontron-electronics.de/linux/u-boot/-/commits/v2020.01-ktn with the additional changes:
--- a/configs/imx8mm_evk_defconfig +++ b/configs/imx8mm_evk_defconfig @@ -85,3 +85,14 @@ CONFIG_MXC_UART=y CONFIG_SYSRESET=y CONFIG_SYSRESET_PSCI=y CONFIG_DM_THERMAL=y +CONFIG_SPL_USB_HOST_SUPPORT=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_USB_SDP_SUPPORT=y +CONFIG_SPL_WATCHDOG_SUPPORT=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="FSL" +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 +CONFIG_CI_UDC=y diff --git a/include/configs/imx8mm_evk.h b/include/configs/imx8mm_evk.h index 991fe0056c4a..d41704d60754 100644 --- a/include/configs/imx8mm_evk.h +++ b/include/configs/imx8mm_evk.h @@ -35,6 +35,11 @@
#endif
+#define CONFIG_EHCI_HCD_INIT_AFTER_RESET +#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) +#define CONFIG_MXC_USB_FLAGS 0 +#define CONFIG_USB_MAX_CONTROLLER_COUNT 2
/* Initial environment variables */ #define CONFIG_EXTRA_ENV_SETTINGS \ "script=boot.scr\0" \
but I get the following error:
U-Boot SPL 2020.01-01059-geb5a1eb17cea-dirty (Jul 01 2021 - 19:45:58 -0300) Normal Boot WDT: Not found! SPL: Unsupported Boot Device! SPL: failed to boot from all boot devices ### ERROR ### Please RESET the board ###
Tim,
Do you still have the imx8mm-evk patches and mx8mm_usb_sdp_spl.conf that you used?
This version of U-Boot does not generate u-boot.itb by default, so I passed the following line in mx8mm_usb_sdp_spl.conf:
.../u-boot/flash.bin:dcd,clear_dcd,plug,jump header
Any help is appreciated.
I plan to upstream this support once I get it resolved.
Fabio,
I no longer have the patches/config around and am not sure I even have a working imx8mm-evk anymore.
Do you have the patches I submitted to enable USB OTG in general on IMX8MM? usb: ehci-mx6: add IMX8MM and IMX8MN OTG support usb: ehci-mx6: move mode set/detect to probe
I would like to get those patches accepted and I think there was some concern that 'usb: ehci-mx6: move mode set/detect to probe' may break gadget support.
I haven't needed to use SDP in some time (we have JTAG programming support for eMMC now). Let me see if I can get SDP working on imx8mm-venice.
Best regards,
Tim

Hi Tim,
On Thu, Jul 1, 2021 at 8:58 PM Tim Harvey tharvey@gateworks.com wrote:
Fabio,
I no longer have the patches/config around and am not sure I even have a working imx8mm-evk anymore.
Do you have the patches I submitted to enable USB OTG in general on IMX8MM? usb: ehci-mx6: add IMX8MM and IMX8MN OTG support usb: ehci-mx6: move mode set/detect to probe
Thanks for pointing out these patches. Does "ums 0 mmc 0" work for you?
I will have a try.
I would like to get those patches accepted and I think there was some concern that 'usb: ehci-mx6: move mode set/detect to probe' may break gadget support.
I have applied this one and tested on warp7 board via "ums 0 mmc 0" and it still works.
I haven't needed to use SDP in some time (we have JTAG programming support for eMMC now). Let me see if I can get SDP working on imx8mm-venice.
Thanks, appreciate it.
Regards,
Fabio Estevam

On Thu, Jul 1, 2021 at 5:36 PM Fabio Estevam festevam@gmail.com wrote:
Hi Tim,
On Thu, Jul 1, 2021 at 8:58 PM Tim Harvey tharvey@gateworks.com wrote:
Fabio,
I no longer have the patches/config around and am not sure I even have a working imx8mm-evk anymore.
Do you have the patches I submitted to enable USB OTG in general on IMX8MM? usb: ehci-mx6: add IMX8MM and IMX8MN OTG support usb: ehci-mx6: move mode set/detect to probe
Thanks for pointing out these patches. Does "ums 0 mmc 0" work for you?
Yes, this works on my board. I just sent a v2 of these patches (cc'd you).
By the way, I took a quick stab at enabling SDP on imx8mm-venice-gw73xx-0x and found compile issues so I configured for an imx8mm_evk using your diffs and hit the same issues.
drivers/usb/host/ehci-mx6.c: In function ‘ehci_hcd_init’: drivers/usb/host/ehci-mx6.c:360:46: error: ‘USB_BASE_ADDR’ undeclared (first use in this function); did you mean ‘SRC_BASE_ADDR’? struct usb_ehci *ehci = (struct usb_ehci *)(USB_BASE_ADDR + ^~~~~~~~~~~~~ SRC_BASE_ADDR drivers/usb/host/ehci-mx6.c:360:46: note: each undeclared identifier is reported only once for each function it appears in drivers/usb/host/ehci-mx6.c:361:4: error: ‘controller_spacing’ undeclared (first use in this function); did you mean ‘console_start’? (controller_spacing * index)); ^~~~~~~~~~~~~~~~~~ ...
The above is resolved with CONFIG_DM_USB=y and CONFIG_SPL_DM_USB=y
After enabling those I just run into other issues with things such as: WARNING 'mkimage.flash.mkimage' not found, resulting binary is not-functional ... aarch64-linux-ld.bfd: cmd/nvedit.o: in function `env_match': /usr/src/venice/uboot-master/cmd/nvedit.c:824: undefined reference to `env_get_char' aarch64-linux-ld.bfd: /usr/src/venice/uboot-master/cmd/nvedit.c:828: undefined reference to `env_get_char' ...
What branch were you working with here? I tried the above with v2021.07-rc5
Tim

Hi Tim,
On Thu, Jul 1, 2021 at 9:49 PM Tim Harvey tharvey@gateworks.com wrote:
Yes, this works on my board. I just sent a v2 of these patches (cc'd you).
I have just tried "ums 0 mmc 1" and it works on a imx8mm-evk now after applying your patches, thanks!
By the way, I took a quick stab at enabling SDP on imx8mm-venice-gw73xx-0x and found compile issues so I configured for an imx8mm_evk using your diffs and hit the same issues.
drivers/usb/host/ehci-mx6.c: In function ‘ehci_hcd_init’: drivers/usb/host/ehci-mx6.c:360:46: error: ‘USB_BASE_ADDR’ undeclared (first use in this function); did you mean ‘SRC_BASE_ADDR’? struct usb_ehci *ehci = (struct usb_ehci *)(USB_BASE_ADDR + ^~~~~~~~~~~~~ SRC_BASE_ADDR drivers/usb/host/ehci-mx6.c:360:46: note: each undeclared identifier is reported only once for each function it appears in drivers/usb/host/ehci-mx6.c:361:4: error: ‘controller_spacing’ undeclared (first use in this function); did you mean ‘console_start’? (controller_spacing * index)); ^~~~~~~~~~~~~~~~~~ ...
The above is resolved with CONFIG_DM_USB=y and CONFIG_SPL_DM_USB=y
After enabling those I just run into other issues with things such as: WARNING 'mkimage.flash.mkimage' not found, resulting binary is not-functional ... aarch64-linux-ld.bfd: cmd/nvedit.o: in function `env_match': /usr/src/venice/uboot-master/cmd/nvedit.c:824: undefined reference to `env_get_char' aarch64-linux-ld.bfd: /usr/src/venice/uboot-master/cmd/nvedit.c:828: undefined reference to `env_get_char' ...
What branch were you working with here? I tried the above with v2021.07-rc5
I am also testing against 2021.07-rc5.
Please see the complete diff (your patches + imx8mm_evk defconfig changes against 2021.07-rc5): https://pastebin.com/raw/BtCD0xat
Now the missing part is SDP. Hopefully we can get SDK working too.
Thanks!

On Thu, Jul 1, 2021 at 9:49 PM Tim Harvey tharvey@gateworks.com wrote:
By the way, I took a quick stab at enabling SDP on imx8mm-venice-gw73xx-0x and found compile issues so I configured for an imx8mm_evk using your diffs and hit the same issues.
drivers/usb/host/ehci-mx6.c: In function ‘ehci_hcd_init’: drivers/usb/host/ehci-mx6.c:360:46: error: ‘USB_BASE_ADDR’ undeclared
Ah, now that I try to enable SDP I see these errors too. To fix this error we need: https://git.kontron-electronics.de/linux/u-boot/-/commit/975e36c71164483a7c6...
This one is also needed: https://git.kontron-electronics.de/linux/u-boot/-/commit/344c83522650ef8d8ea...
(first use in this function); did you mean ‘SRC_BASE_ADDR’? struct usb_ehci *ehci = (struct usb_ehci *)(USB_BASE_ADDR + ^~~~~~~~~~~~~ SRC_BASE_ADDR drivers/usb/host/ehci-mx6.c:360:46: note: each undeclared identifier is reported only once for each function it appears in drivers/usb/host/ehci-mx6.c:361:4: error: ‘controller_spacing’
I need to check on this one.
Thanks

Tim,
On Thu, Jul 1, 2021 at 10:13 PM Fabio Estevam festevam@gmail.com wrote:
On Thu, Jul 1, 2021 at 9:49 PM Tim Harvey tharvey@gateworks.com wrote:
By the way, I took a quick stab at enabling SDP on imx8mm-venice-gw73xx-0x and found compile issues so I configured for an imx8mm_evk using your diffs and hit the same issues.
drivers/usb/host/ehci-mx6.c: In function ‘ehci_hcd_init’: drivers/usb/host/ehci-mx6.c:360:46: error: ‘USB_BASE_ADDR’ undeclared
Ah, now that I try to enable SDP I see these errors too. To fix this error we need: https://git.kontron-electronics.de/linux/u-boot/-/commit/975e36c71164483a7c6...
This one is also needed: https://git.kontron-electronics.de/linux/u-boot/-/commit/344c83522650ef8d8ea...
(first use in this function); did you mean ‘SRC_BASE_ADDR’? struct usb_ehci *ehci = (struct usb_ehci *)(USB_BASE_ADDR + ^~~~~~~~~~~~~ SRC_BASE_ADDR drivers/usb/host/ehci-mx6.c:360:46: note: each undeclared identifier is reported only once for each function it appears in drivers/usb/host/ehci-mx6.c:361:4: error: ‘controller_spacing’
I need to check on this one.
Attached is a diff with all the changes that allow building SDP support for imx8mm_evk.
But I still get:
U-Boot SPL 2021.07-rc5-00002-g5f269bf8bd14-dirty (Jul 01 2021 - 22:28:29 -0300) WDT: Not starting SPL: Unsupported Boot Device! SPL: failed to boot from all boot devices ### ERROR ### Please RESET the board ###
Please let me know if you get any progress with SDP.
Thanks

Hi Tim,
On Thu, Jul 1, 2021 at 10:36 PM Fabio Estevam festevam@gmail.com wrote:
But I still get:
U-Boot SPL 2021.07-rc5-00002-g5f269bf8bd14-dirty (Jul 01 2021 - 22:28:29 -0300) WDT: Not starting SPL: Unsupported Boot Device! SPL: failed to boot from all boot devices ### ERROR ### Please RESET the board ###
Please let me know if you get any progress with SDP.
The USB_BOOT option was missing in imx8mm_evk spl:
--- a/board/freescale/imx8mm_evk/spl.c +++ b/board/freescale/imx8mm_evk/spl.c @@ -33,6 +33,8 @@ DECLARE_GLOBAL_DATA_PTR; int spl_board_boot_device(enum boot_device boot_dev_spl) { switch (boot_dev_spl) { + case USB_BOOT: + return BOOT_DEVICE_BOARD; case SD2_BOOT: case MMC2_BOOT: return BOOT_DEVICE_MMC1;
After that I can load flash.bin and u-boot.itb via uuu like this (thanks to Heiko's suggestion!)
sudo uuu flash.bin sudo uuu SDPV: write -f u-boot.itb -addr 0x42000000 sudo uuu SDPV: jump -addr 0x42000000
I will submit the support for imx8mm-evk SDP soon. Will also add these commands into the readme.
Thanks

On Fri, Jul 2, 2021 at 7:50 AM Fabio Estevam festevam@gmail.com wrote:
Hi Tim,
On Thu, Jul 1, 2021 at 10:36 PM Fabio Estevam festevam@gmail.com wrote:
But I still get:
U-Boot SPL 2021.07-rc5-00002-g5f269bf8bd14-dirty (Jul 01 2021 - 22:28:29 -0300) WDT: Not starting SPL: Unsupported Boot Device! SPL: failed to boot from all boot devices ### ERROR ### Please RESET the board ###
Please let me know if you get any progress with SDP.
The USB_BOOT option was missing in imx8mm_evk spl:
--- a/board/freescale/imx8mm_evk/spl.c +++ b/board/freescale/imx8mm_evk/spl.c @@ -33,6 +33,8 @@ DECLARE_GLOBAL_DATA_PTR; int spl_board_boot_device(enum boot_device boot_dev_spl) { switch (boot_dev_spl) {
case USB_BOOT:
return BOOT_DEVICE_BOARD; case SD2_BOOT: case MMC2_BOOT: return BOOT_DEVICE_MMC1;
After that I can load flash.bin and u-boot.itb via uuu like this (thanks to Heiko's suggestion!)
sudo uuu flash.bin sudo uuu SDPV: write -f u-boot.itb -addr 0x42000000 sudo uuu SDPV: jump -addr 0x42000000
I will submit the support for imx8mm-evk SDP soon. Will also add these commands into the readme.
Fabio,
After applying the other patches in your diff I'm able to get SDP booting on my board as well.
Please CC me when you submit your SDP series. It will overlap with my 'usb: ehci-mx6: move mode set/detect to probe'.
Also, when you prepare your patches note you don't need the following in your include/config/imx8mm_evk.h #define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) ^^^ this is defaulted in drivers/usb/host/ehci-mx6.c #define CONFIG_MXC_USB_FLAGS 0 ^^^ doesn't appear to be used by ehci-mx6.c
Unfortunately enabling SPL SDP for my board brings me over the SPL size. I really want to come up with a way to load dram config dynamically.
Best regards,
Tim

Hi Tim,
On Fri, Jul 2, 2021 at 6:13 PM Tim Harvey tharvey@gateworks.com wrote:
Fabio,
After applying the other patches in your diff I'm able to get SDP booting on my board as well.
Please CC me when you submit your SDP series. It will overlap with my 'usb: ehci-mx6: move mode set/detect to probe'.
Ok, great. I will submit your two patches, Frieder's and mine in a single series.
Also, when you prepare your patches note you don't need the following in your include/config/imx8mm_evk.h #define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) ^^^ this is defaulted in drivers/usb/host/ehci-mx6.c #define CONFIG_MXC_USB_FLAGS 0 ^^^ doesn't appear to be used by ehci-mx6.c
Thanks, I have removed it.
Unfortunately enabling SPL SDP for my board brings me over the SPL size. I really want to come up with a way to load dram config dynamically.
Yes, I am interested in doing this too.
I saw the same issue on an imx8mm-cl-iot-gate.
They support several DDR config options and after enabling SPL SDP there was an OCRAM overflow.
Thanks,
Fabio Estevam

Hi
Adding Tommaso
On Fri, Apr 10, 2020 at 8:37 PM Tim Harvey tharvey@gateworks.com wrote:
On Thu, Apr 9, 2020 at 2:45 PM Tim Harvey tharvey@gateworks.com wrote:
On Thu, Apr 9, 2020 at 3:02 AM Schrempf Frieder frieder.schrempf@kontron.de wrote:
On 08.04.20 17:31, Tim Harvey wrote: [...]
In my case I'm loading a FIT image, so things are a bit different. Where are you loading the image to?
I have the following line in mx8mm_usb_sdp_spl.conf to load my FIT image to DDR and jump to it:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
Frieder,
I was trying to load u-boot.img
The SPL boots fine: U-Boot SPL 2020.01-00029-g5ad7797 (Apr 08 2020 - 08:16:53 -0700) read error from device: 9310b8 register: x!Normal Boot Trying to boot from USB SDP SDP: initialize... SDP: handle requests..
But when I 'imx_usb u-boot.img' it complains there is no header on u-boot.img. I enabled FIT generation and attempted to 'imx_usb u-boot.itb' but imx_usb still complains about no header found.
My mx8mm_usb_sdp_spl.conf loooks like this: mx8mm_spl_sdp #hid/bulk,[old_header,]max packet size, {ram start, ram size}(repeat valid ram areas) #In SPL, we typically load u-boot.img which has a U-boot header... hid,1024,0x910000,0x40000000,1G,0x00900000,0x40000
#0x60000 - 0x8400 = 0x57c00, +0x3000=5ac00 (FIT image) ../u-boot-imx6/u-boot.bin:load 0x40200000 ../u-boot-imx6/bl31-iMX8MM.bin:load 0x00920000,jump 0x920000
What does your mx8mm_usb_sdp_spl.conf look like? I must admit I don't really understand how these are configured.
It looks just like yours except that I have a single instruction as already stated above:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
and I'm loading the FIT image by running './imx_usb' without arguments.
As imx_usb_loader can't parse FIT image headers, I use 'jump_direct' to jump to the raw image entry point and let SPL parse the FIT. I think in that case imx_usb_loader shouldn't complain about a missing header.
Frieder,
Ok, I finally understand. Using 'imx_usb <file>' which is what I was doing is not the same as loading it via the conf file and was why it was looking for a header.
So now that I'm using the imx_usb.conf files fully instead It's loading u-boot.itb and jumping but unfortunately I'm still not quite there.
Here's what I'm seeing:
U-Boot SPL 2020.01-00029-g6529a03-dirty (Apr 09 2020 - 13:02:21 -0700) Normal Boot Trying to boot from USB SDP SDP: initialize... SDP: handle requests... Downloading file of size 584020 to 0x40200000... done Jumping to header at 0x40200000 Header Tag is not an IMX image
Is the 'Header Tag' message normal? From adding some debugging it appears to matching the dts name in my board_fit_config_name_match and parsing the FIT image, loading the ATF and jumping but then I get nothing. What would I expect at this point and do you have any troubleshooting tips?
Frieder,
My issue was that I forgot to set ATF_LOAD_ADDR=0x920000!
So I'm running now, booting imx8mm-evk via SDP using your USB patches and imx_usb configuration.
Thank you for your help!
Tim
Michael

Hi All, In these days I'm working on SDP_SPL support on iMX8MM, thanks to Tim that guide me over the following patches:
https://patchwork.ozlabs.org/project/uboot/list/?series=251796&state=*
I'm able to reach the goal to boot U-Boot 2022.04-rc3 over SDP from SPL. I would like to suggest that at the current state of the project you need to add also the following configs:
CONFIG_SPL_USB_HOST=y CONFIG_SDP_LOADADDR=0x40400000
Using that I'm able to boot the U-Boot 2022.04-rc3 with the following .lst file:
sudo uuu file.lst
file.lst ------------------------------------------------------------------------ uuu_version 1.2.39
# This command will be run when i.MX6/7 i.MX8MM, i.MX8MQ SDP: boot -f flash.bin
# These commands will be run when use SPL and will be skipped if no spl # if (SPL support SDPV) # { SDPV: delay 1000 SDPV: write -f flash.bin -skipspl -offset 0x0 SDPV: jump # }
FB: done ------------------------------------------------------------------------
I hope this can help some other person.
Regards, Tommaso
On Wed, Mar 09, 2022 at 11:52:47AM +0100, Michael Nazzareno Trimarchi wrote:
Hi
Adding Tommaso
On Fri, Apr 10, 2020 at 8:37 PM Tim Harvey tharvey@gateworks.com wrote:
On Thu, Apr 9, 2020 at 2:45 PM Tim Harvey tharvey@gateworks.com wrote:
On Thu, Apr 9, 2020 at 3:02 AM Schrempf Frieder frieder.schrempf@kontron.de wrote:
On 08.04.20 17:31, Tim Harvey wrote: [...]
In my case I'm loading a FIT image, so things are a bit different. Where are you loading the image to?
I have the following line in mx8mm_usb_sdp_spl.conf to load my FIT image to DDR and jump to it:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
Frieder,
I was trying to load u-boot.img
The SPL boots fine: U-Boot SPL 2020.01-00029-g5ad7797 (Apr 08 2020 - 08:16:53 -0700) read error from device: 9310b8 register: x!Normal Boot Trying to boot from USB SDP SDP: initialize... SDP: handle requests..
But when I 'imx_usb u-boot.img' it complains there is no header on u-boot.img. I enabled FIT generation and attempted to 'imx_usb u-boot.itb' but imx_usb still complains about no header found.
My mx8mm_usb_sdp_spl.conf loooks like this: mx8mm_spl_sdp #hid/bulk,[old_header,]max packet size, {ram start, ram size}(repeat valid ram areas) #In SPL, we typically load u-boot.img which has a U-boot header... hid,1024,0x910000,0x40000000,1G,0x00900000,0x40000
#0x60000 - 0x8400 = 0x57c00, +0x3000=5ac00 (FIT image) ../u-boot-imx6/u-boot.bin:load 0x40200000 ../u-boot-imx6/bl31-iMX8MM.bin:load 0x00920000,jump 0x920000
What does your mx8mm_usb_sdp_spl.conf look like? I must admit I don't really understand how these are configured.
It looks just like yours except that I have a single instruction as already stated above:
/path/to/image/u-boot.itb:load 0x40200000, jump_direct 0x40200000
and I'm loading the FIT image by running './imx_usb' without arguments.
As imx_usb_loader can't parse FIT image headers, I use 'jump_direct' to jump to the raw image entry point and let SPL parse the FIT. I think in that case imx_usb_loader shouldn't complain about a missing header.
Frieder,
Ok, I finally understand. Using 'imx_usb <file>' which is what I was doing is not the same as loading it via the conf file and was why it was looking for a header.
So now that I'm using the imx_usb.conf files fully instead It's loading u-boot.itb and jumping but unfortunately I'm still not quite there.
Here's what I'm seeing:
U-Boot SPL 2020.01-00029-g6529a03-dirty (Apr 09 2020 - 13:02:21 -0700) Normal Boot Trying to boot from USB SDP SDP: initialize... SDP: handle requests... Downloading file of size 584020 to 0x40200000... done Jumping to header at 0x40200000 Header Tag is not an IMX image
Is the 'Header Tag' message normal? From adding some debugging it appears to matching the dts name in my board_fit_config_name_match and parsing the FIT image, loading the ATF and jumping but then I get nothing. What would I expect at this point and do you have any troubleshooting tips?
Frieder,
My issue was that I forgot to set ATF_LOAD_ADDR=0x920000!
So I'm running now, booting imx8mm-evk via SDP using your USB patches and imx_usb configuration.
Thank you for your help!
Tim
Michael
-- Michael Nazzareno Trimarchi Co-Founder & Chief Executive Officer M. +39 347 913 2170 michael@amarulasolutions.com __________________________________
Amarula Solutions BV Joop Geesinkweg 125, 1114 AB, Amsterdam, NL T. +31 (0)85 111 9172 info@amarulasolutions.com www.amarulasolutions.com
participants (7)
-
Fabio Estevam
-
Igor Opaniuk
-
Michael Nazzareno Trimarchi
-
Schrempf Frieder
-
Sherry Sun
-
Tim Harvey
-
Tommaso Merciai