mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* firmwareload fails for cortex-m7 on imx8mp
@ 2024-11-15 13:43 Stefano Manni
  2024-11-15 14:02 ` Ahmad Fatoum
  0 siblings, 1 reply; 8+ messages in thread
From: Stefano Manni @ 2024-11-15 13:43 UTC (permalink / raw)
  To: barebox

Dear all,

I cannot run an ELF image on the M7 core on the imx8mp soc.
The ELF comes from zephyr and it runs as expected when I load it from linux,
but in barebox I encounter this error:

barebox@NXP i.MX8MPlus EVK board:/ tftp zephyr.elf
        [################################################################]
barebox@NXP i.MX8MPlus EVK board:/ firmwareload zephyr.elf
remoteproc0: powering up remoteproc-cm7.of
DABT (current EL) exception (ESR 0x96000061) at 0x00000000007e0004
elr: 00000000ffd826f4 lr : 00000000ffd829cc
x0 : 00000000007e0000 x1 : 00000000bff22a40
x2 : 0000000000003f88 x3 : 00002add00000a91
x4 : 000000000000000c x5 : 00000000ffff7478
x6 : 00000000007e0004 x7 : 727065746f6d6572
x8 : 585858203a30636f x9 : 2074736564205858
x10: 3030303030303030 x11: 3030303065373030
x12: 3030302063727320 x13: 6666623030303030
x14: 6973203433613232 x15: 0000000000000001
x16: 00000000ffff7458 x17: 0000000000000001
x18: 00000000ffff79e0 x19: 00000000bff22994
x20: 0000000000003f94 x21: 00000000007e0000
x22: 00000000bff22940 x23: 00000000bfdd0b80
x24: 00000000bfdd0b28 x25: 00000000ffff7a80
x26: 0000000000000001 x27: 00000000ffd8edc0
x28: 0000000000003f94 x29: 00000000ffff79c0

Call trace:
[<ffd826f4>] (__arch_memcpy+0x48/0x13c) from [<ffd82a00>] (memcpy+0xc/0x14)
[<ffd82a00>] (memcpy+0xc/0x14) from [<ffd5150c>]
(rproc_elf_load_segments+0x148/0x16c)
[<ffd5150c>] (rproc_elf_load_segments+0x148/0x16c) from [<ffd5115c>]
(rproc_firmware_finish+0x84/0x10c)
[<ffd5115c>] (rproc_firmware_finish+0x84/0x10c) from [<ffd141b0>]
(firmware_close+0x28/0x4c)
[<ffd141b0>] (firmware_close+0x28/0x4c) from [<ffd73c44>] (cdev_close+0x3c/0x44)
[<ffd73c44>] (cdev_close+0x3c/0x44) from [<ffd751cc>] (devfs_close+0x10/0x18)
[<ffd751cc>] (devfs_close+0x10/0x18) from [<ffd76be4>] (close+0x110/0x118)
[<ffd76be4>] (close+0x110/0x118) from [<ffd1466c>]
(firmwaremgr_load_file+0x140/0x198)
[<ffd1466c>] (firmwaremgr_load_file+0x140/0x198) from [<ffd5eac4>]
(do_firmwareload+0xc4/0xd0)
[<ffd5eac4>] (do_firmwareload+0xc4/0xd0) from [<ffd078e0>]
(execute_command+0x44/0x8c)
[<ffd078e0>] (execute_command+0x44/0x8c) from [<ffd0422c>]
(execute_binfmt+0x68/0xa0)
[<ffd0422c>] (execute_binfmt+0x68/0xa0) from [<ffd11200>]
(run_list_real+0x8cc/0x978)
[<ffd11200>] (run_list_real+0x8cc/0x978) from [<ffd10788>]
(parse_stream_outer+0x140/0x1ec)
[<ffd10788>] (parse_stream_outer+0x140/0x1ec) from [<ffd115e0>]
(run_shell+0x64/0xac)
[<ffd115e0>] (run_shell+0x64/0xac) from [<ffd01a28>] (run_init+0x114/0x258)
[<ffd01a28>] (run_init+0x114/0x258) from [<ffd01bbc>] (start_barebox+0x50/0x8c)
[<ffd01bbc>] (start_barebox+0x50/0x8c) from [<ffd81748>] (decode_cache+0x0/0x5c)
[<ffd81748>] (decode_cache+0x0/0x5c) from [<ffd0000c>]
(__bare_init_start+0x0/0x14)
[<ffd0000c>] (__bare_init_start+0x0/0x14) from [<402046c8>] (0x402046c8)
[<402046c8>] (0x402046c8) from [<40203f48>] (0x40203f48)
panic: unhandled exception


As you can see the exception happens when rproc_elf_load_segments() tries to
memcpy a segment where the M7 expects it. The ELF has been compiled to run
from ITCM memory (0x007E0000-0x007FFFFF).

Do you have any idea? Maybe may I have to put a reserved-memory for ITCM?

Thank you.

Best,
Stefano



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: firmwareload fails for cortex-m7 on imx8mp
  2024-11-15 13:43 firmwareload fails for cortex-m7 on imx8mp Stefano Manni
@ 2024-11-15 14:02 ` Ahmad Fatoum
  2024-11-15 14:47   ` Stefano Manni
  0 siblings, 1 reply; 8+ messages in thread
From: Ahmad Fatoum @ 2024-11-15 14:02 UTC (permalink / raw)
  To: Stefano Manni, barebox

Hello Stefano,

On 15.11.24 14:43, Stefano Manni wrote:
> Dear all,
> 
> I cannot run an ELF image on the M7 core on the imx8mp soc.
> The ELF comes from zephyr and it runs as expected when I load it from linux,
> but in barebox I encounter this error:
> 
> barebox@NXP i.MX8MPlus EVK board:/ tftp zephyr.elf
>         [################################################################]
> barebox@NXP i.MX8MPlus EVK board:/ firmwareload zephyr.elf
> remoteproc0: powering up remoteproc-cm7.of
> DABT (current EL) exception (ESR 0x96000061) at 0x00000000007e0004

https://esr.arm64.dev/#0x96000061 decodes this as
"Abort caused by writing to memory" (Alignment fault) with valid FAR.

FAR is the addresss listed here (0x00000000007e0004), which is indeed
not divisible by 8.

> [<ffd826f4>] (__arch_memcpy+0x48/0x13c) from [<ffd82a00>] (memcpy+0xc/0x14)

The optimized memcpy used here expects misalignment not to trap.

> As you can see the exception happens when rproc_elf_load_segments() tries to
> memcpy a segment where the M7 expects it. The ELF has been compiled to run
> from ITCM memory (0x007E0000-0x007FFFFF).
> 
> Do you have any idea? Maybe may I have to put a reserved-memory for ITCM?

I think I may have broken this when I changed barebox to map everything outside
main memory as uncached.

I did this, because we 1) don't want to risk the main CPU speculating into I/O
memory and 2) don't want to have to use memory barriers for synchronization.

The flipside is that drivers that access I/O memory must do this via
readl/writel and friends or via memcpy_io/memset_io. This was already required
before, but some drivers that didn't do this were lucky enough to fly under
the radar. At least for remoteproc, this seems no longer the case.

I just Cc'd you on a patch to fix this for remoteproc.
Please let me know with a Tested-by if this resolves your issue.

Cheers,
Ahmad

> 
> Thank you.
> 
> Best,
> Stefano
> 
> 


-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: firmwareload fails for cortex-m7 on imx8mp
  2024-11-15 14:02 ` Ahmad Fatoum
@ 2024-11-15 14:47   ` Stefano Manni
  2024-11-15 14:49     ` Ahmad Fatoum
  0 siblings, 1 reply; 8+ messages in thread
From: Stefano Manni @ 2024-11-15 14:47 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

Hello Ahmad,

patch [1] works fine when M7 firmware is compiled to run from ITCM. Thank you!

But when I use exactly the same firmware but compiled to run from DDR
(see [2]) I got:

barebox@NXP i.MX8MPlus EVK board:/ firmwareload hello-ddr.elf
remoteproc0: powering up remoteproc-cm7.of
ERROR: remoteproc0: bad phdr da 0x80000000 mem 0x3de4
ERROR: remoteproc0: Failed to load program segments: -22

Note that I can run it both from linux and u-boot.

[1] https://lore.barebox.org/barebox/20241115135242.1251691-1-a.fatoum@pengutronix.de/
[2] https://docs.zephyrproject.org/latest/boards/nxp/imx8mp_evk/doc/index.html#programming-and-debugging-m7

Il giorno ven 15 nov 2024 alle ore 15:02 Ahmad Fatoum
<a.fatoum@pengutronix.de> ha scritto:
>
> Hello Stefano,
>
> On 15.11.24 14:43, Stefano Manni wrote:
> > Dear all,
> >
> > I cannot run an ELF image on the M7 core on the imx8mp soc.
> > The ELF comes from zephyr and it runs as expected when I load it from linux,
> > but in barebox I encounter this error:
> >
> > barebox@NXP i.MX8MPlus EVK board:/ tftp zephyr.elf
> >         [################################################################]
> > barebox@NXP i.MX8MPlus EVK board:/ firmwareload zephyr.elf
> > remoteproc0: powering up remoteproc-cm7.of
> > DABT (current EL) exception (ESR 0x96000061) at 0x00000000007e0004
>
> https://esr.arm64.dev/#0x96000061 decodes this as
> "Abort caused by writing to memory" (Alignment fault) with valid FAR.
>
> FAR is the addresss listed here (0x00000000007e0004), which is indeed
> not divisible by 8.
>
> > [<ffd826f4>] (__arch_memcpy+0x48/0x13c) from [<ffd82a00>] (memcpy+0xc/0x14)
>
> The optimized memcpy used here expects misalignment not to trap.
>
> > As you can see the exception happens when rproc_elf_load_segments() tries to
> > memcpy a segment where the M7 expects it. The ELF has been compiled to run
> > from ITCM memory (0x007E0000-0x007FFFFF).
> >
> > Do you have any idea? Maybe may I have to put a reserved-memory for ITCM?
>
> I think I may have broken this when I changed barebox to map everything outside
> main memory as uncached.
>
> I did this, because we 1) don't want to risk the main CPU speculating into I/O
> memory and 2) don't want to have to use memory barriers for synchronization.
>
> The flipside is that drivers that access I/O memory must do this via
> readl/writel and friends or via memcpy_io/memset_io. This was already required
> before, but some drivers that didn't do this were lucky enough to fly under
> the radar. At least for remoteproc, this seems no longer the case.
>
> I just Cc'd you on a patch to fix this for remoteproc.
> Please let me know with a Tested-by if this resolves your issue.
>
> Cheers,
> Ahmad
>
> >
> > Thank you.
> >
> > Best,
> > Stefano
> >
> >
>
>
> --
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: firmwareload fails for cortex-m7 on imx8mp
  2024-11-15 14:47   ` Stefano Manni
@ 2024-11-15 14:49     ` Ahmad Fatoum
  2024-11-15 15:01       ` Stefano Manni
  0 siblings, 1 reply; 8+ messages in thread
From: Ahmad Fatoum @ 2024-11-15 14:49 UTC (permalink / raw)
  To: Stefano Manni; +Cc: barebox

Hello Stefano,

On 15.11.24 15:47, Stefano Manni wrote:
> Hello Ahmad,
> 
> patch [1] works fine when M7 firmware is compiled to run from ITCM. Thank you!

Thanks for testing.

> But when I use exactly the same firmware but compiled to run from DDR
> (see [2]) I got:
> 
> barebox@NXP i.MX8MPlus EVK board:/ firmwareload hello-ddr.elf
> remoteproc0: powering up remoteproc-cm7.of
> ERROR: remoteproc0: bad phdr da 0x80000000 mem 0x3de4
> ERROR: remoteproc0: Failed to load program segments: -22
> 
> Note that I can run it both from linux and u-boot.
> 
> [1] https://lore.barebox.org/barebox/20241115135242.1251691-1-a.fatoum@pengutronix.de/
> [2] https://docs.zephyrproject.org/latest/boards/nxp/imx8mp_evk/doc/index.html#programming-and-debugging-m7

Can you send me the ELF file, so I can look at the headers myself?

Cheers,
Ahmad

> 
> Il giorno ven 15 nov 2024 alle ore 15:02 Ahmad Fatoum
> <a.fatoum@pengutronix.de> ha scritto:
>>
>> Hello Stefano,
>>
>> On 15.11.24 14:43, Stefano Manni wrote:
>>> Dear all,
>>>
>>> I cannot run an ELF image on the M7 core on the imx8mp soc.
>>> The ELF comes from zephyr and it runs as expected when I load it from linux,
>>> but in barebox I encounter this error:
>>>
>>> barebox@NXP i.MX8MPlus EVK board:/ tftp zephyr.elf
>>>         [################################################################]
>>> barebox@NXP i.MX8MPlus EVK board:/ firmwareload zephyr.elf
>>> remoteproc0: powering up remoteproc-cm7.of
>>> DABT (current EL) exception (ESR 0x96000061) at 0x00000000007e0004
>>
>> https://esr.arm64.dev/#0x96000061 decodes this as
>> "Abort caused by writing to memory" (Alignment fault) with valid FAR.
>>
>> FAR is the addresss listed here (0x00000000007e0004), which is indeed
>> not divisible by 8.
>>
>>> [<ffd826f4>] (__arch_memcpy+0x48/0x13c) from [<ffd82a00>] (memcpy+0xc/0x14)
>>
>> The optimized memcpy used here expects misalignment not to trap.
>>
>>> As you can see the exception happens when rproc_elf_load_segments() tries to
>>> memcpy a segment where the M7 expects it. The ELF has been compiled to run
>>> from ITCM memory (0x007E0000-0x007FFFFF).
>>>
>>> Do you have any idea? Maybe may I have to put a reserved-memory for ITCM?
>>
>> I think I may have broken this when I changed barebox to map everything outside
>> main memory as uncached.
>>
>> I did this, because we 1) don't want to risk the main CPU speculating into I/O
>> memory and 2) don't want to have to use memory barriers for synchronization.
>>
>> The flipside is that drivers that access I/O memory must do this via
>> readl/writel and friends or via memcpy_io/memset_io. This was already required
>> before, but some drivers that didn't do this were lucky enough to fly under
>> the radar. At least for remoteproc, this seems no longer the case.
>>
>> I just Cc'd you on a patch to fix this for remoteproc.
>> Please let me know with a Tested-by if this resolves your issue.
>>
>> Cheers,
>> Ahmad
>>
>>>
>>> Thank you.
>>>
>>> Best,
>>> Stefano
>>>
>>>
>>
>>
>> --
>> Pengutronix e.K.                           |                             |
>> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
>> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
>> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 


-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: firmwareload fails for cortex-m7 on imx8mp
  2024-11-15 14:49     ` Ahmad Fatoum
@ 2024-11-15 15:01       ` Stefano Manni
  2024-11-19  9:03         ` Ahmad Fatoum
  0 siblings, 1 reply; 8+ messages in thread
From: Stefano Manni @ 2024-11-15 15:01 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

Hello Ahmad,

I put it on here: https://we.tl/t-HrzdMMJXpU
because I didn't know if I can attach files in the mailing list.

Best,
Stefano


Il giorno ven 15 nov 2024 alle ore 15:49 Ahmad Fatoum

<a.fatoum@pengutronix.de> ha scritto:
>
> Hello Stefano,
>
> On 15.11.24 15:47, Stefano Manni wrote:
> > Hello Ahmad,
> >
> > patch [1] works fine when M7 firmware is compiled to run from ITCM. Thank you!
>
> Thanks for testing.
>
> > But when I use exactly the same firmware but compiled to run from DDR
> > (see [2]) I got:
> >
> > barebox@NXP i.MX8MPlus EVK board:/ firmwareload hello-ddr.elf
> > remoteproc0: powering up remoteproc-cm7.of
> > ERROR: remoteproc0: bad phdr da 0x80000000 mem 0x3de4
> > ERROR: remoteproc0: Failed to load program segments: -22
> >
> > Note that I can run it both from linux and u-boot.
> >
> > [1] https://lore.barebox.org/barebox/20241115135242.1251691-1-a.fatoum@pengutronix.de/
> > [2] https://docs.zephyrproject.org/latest/boards/nxp/imx8mp_evk/doc/index.html#programming-and-debugging-m7
>
> Can you send me the ELF file, so I can look at the headers myself?
>
> Cheers,
> Ahmad
>
> >
> > Il giorno ven 15 nov 2024 alle ore 15:02 Ahmad Fatoum
> > <a.fatoum@pengutronix.de> ha scritto:
> >>
> >> Hello Stefano,
> >>
> >> On 15.11.24 14:43, Stefano Manni wrote:
> >>> Dear all,
> >>>
> >>> I cannot run an ELF image on the M7 core on the imx8mp soc.
> >>> The ELF comes from zephyr and it runs as expected when I load it from linux,
> >>> but in barebox I encounter this error:
> >>>
> >>> barebox@NXP i.MX8MPlus EVK board:/ tftp zephyr.elf
> >>>         [################################################################]
> >>> barebox@NXP i.MX8MPlus EVK board:/ firmwareload zephyr.elf
> >>> remoteproc0: powering up remoteproc-cm7.of
> >>> DABT (current EL) exception (ESR 0x96000061) at 0x00000000007e0004
> >>
> >> https://esr.arm64.dev/#0x96000061 decodes this as
> >> "Abort caused by writing to memory" (Alignment fault) with valid FAR.
> >>
> >> FAR is the addresss listed here (0x00000000007e0004), which is indeed
> >> not divisible by 8.
> >>
> >>> [<ffd826f4>] (__arch_memcpy+0x48/0x13c) from [<ffd82a00>] (memcpy+0xc/0x14)
> >>
> >> The optimized memcpy used here expects misalignment not to trap.
> >>
> >>> As you can see the exception happens when rproc_elf_load_segments() tries to
> >>> memcpy a segment where the M7 expects it. The ELF has been compiled to run
> >>> from ITCM memory (0x007E0000-0x007FFFFF).
> >>>
> >>> Do you have any idea? Maybe may I have to put a reserved-memory for ITCM?
> >>
> >> I think I may have broken this when I changed barebox to map everything outside
> >> main memory as uncached.
> >>
> >> I did this, because we 1) don't want to risk the main CPU speculating into I/O
> >> memory and 2) don't want to have to use memory barriers for synchronization.
> >>
> >> The flipside is that drivers that access I/O memory must do this via
> >> readl/writel and friends or via memcpy_io/memset_io. This was already required
> >> before, but some drivers that didn't do this were lucky enough to fly under
> >> the radar. At least for remoteproc, this seems no longer the case.
> >>
> >> I just Cc'd you on a patch to fix this for remoteproc.
> >> Please let me know with a Tested-by if this resolves your issue.
> >>
> >> Cheers,
> >> Ahmad
> >>
> >>>
> >>> Thank you.
> >>>
> >>> Best,
> >>> Stefano
> >>>
> >>>
> >>
> >>
> >> --
> >> Pengutronix e.K.                           |                             |
> >> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> >> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> >> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> >
>
>
> --
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: firmwareload fails for cortex-m7 on imx8mp
  2024-11-15 15:01       ` Stefano Manni
@ 2024-11-19  9:03         ` Ahmad Fatoum
  2024-11-19 10:40           ` Stefano Manni
  0 siblings, 1 reply; 8+ messages in thread
From: Ahmad Fatoum @ 2024-11-19  9:03 UTC (permalink / raw)
  To: Stefano Manni; +Cc: barebox

Hi Stefano,

On 15.11.24 16:01, Stefano Manni wrote:
> Il giorno ven 15 nov 2024 alle ore 15:49 Ahmad Fatoum
> 
> <a.fatoum@pengutronix.de> ha scritto:
>>
>> Hello Stefano,
>>
>> On 15.11.24 15:47, Stefano Manni wrote:
>>> Hello Ahmad,
>>>
>>> patch [1] works fine when M7 firmware is compiled to run from ITCM. Thank you!
>>
>> Thanks for testing.
>>
>>> But when I use exactly the same firmware but compiled to run from DDR
>>> (see [2]) I got:
>>>
>>> barebox@NXP i.MX8MPlus EVK board:/ firmwareload hello-ddr.elf
>>> remoteproc0: powering up remoteproc-cm7.of
>>> ERROR: remoteproc0: bad phdr da 0x80000000 mem 0x3de4
>>> ERROR: remoteproc0: Failed to load program segments: -22
>>>
>>> Note that I can run it both from linux and u-boot.

I am surprised it works for you in Linux. To get it working with barebox:

 1) run iomem and note where your malloc area begins. Set CONFIG_MALLOC_SIZE,
    so it starts after 0x90000000 

 2) Add the following to your DT:

&{/reserved-memory} {
	rproc_reserved: rproc@80000000 {
        	reg = <0 0x80000000 0 0x10000000>;
	};
};

&remoteproc_cm7 {
	memory-region = <&rproc_reserved>;
};

Do you not have an equivalent memory-region definition in your kernel DT?

 3) I found some issues that I just Cc'd you on the fixes for. They may not be
    necessary for the simple hello-ddr.elf example though.

Cheers,
Ahmad

>>>
>>> [1] https://lore.barebox.org/barebox/20241115135242.1251691-1-a.fatoum@pengutronix.de/
>>> [2] https://docs.zephyrproject.org/latest/boards/nxp/imx8mp_evk/doc/index.html#programming-and-debugging-m7
>>
>> Can you send me the ELF file, so I can look at the headers myself?
>>
>> Cheers,
>> Ahmad
>>
>>>
>>> Il giorno ven 15 nov 2024 alle ore 15:02 Ahmad Fatoum
>>> <a.fatoum@pengutronix.de> ha scritto:
>>>>
>>>> Hello Stefano,
>>>>
>>>> On 15.11.24 14:43, Stefano Manni wrote:
>>>>> Dear all,
>>>>>
>>>>> I cannot run an ELF image on the M7 core on the imx8mp soc.
>>>>> The ELF comes from zephyr and it runs as expected when I load it from linux,
>>>>> but in barebox I encounter this error:
>>>>>
>>>>> barebox@NXP i.MX8MPlus EVK board:/ tftp zephyr.elf
>>>>>         [################################################################]
>>>>> barebox@NXP i.MX8MPlus EVK board:/ firmwareload zephyr.elf
>>>>> remoteproc0: powering up remoteproc-cm7.of
>>>>> DABT (current EL) exception (ESR 0x96000061) at 0x00000000007e0004
>>>>
>>>> https://esr.arm64.dev/#0x96000061 decodes this as
>>>> "Abort caused by writing to memory" (Alignment fault) with valid FAR.
>>>>
>>>> FAR is the addresss listed here (0x00000000007e0004), which is indeed
>>>> not divisible by 8.
>>>>
>>>>> [<ffd826f4>] (__arch_memcpy+0x48/0x13c) from [<ffd82a00>] (memcpy+0xc/0x14)
>>>>
>>>> The optimized memcpy used here expects misalignment not to trap.
>>>>
>>>>> As you can see the exception happens when rproc_elf_load_segments() tries to
>>>>> memcpy a segment where the M7 expects it. The ELF has been compiled to run
>>>>> from ITCM memory (0x007E0000-0x007FFFFF).
>>>>>
>>>>> Do you have any idea? Maybe may I have to put a reserved-memory for ITCM?
>>>>
>>>> I think I may have broken this when I changed barebox to map everything outside
>>>> main memory as uncached.
>>>>
>>>> I did this, because we 1) don't want to risk the main CPU speculating into I/O
>>>> memory and 2) don't want to have to use memory barriers for synchronization.
>>>>
>>>> The flipside is that drivers that access I/O memory must do this via
>>>> readl/writel and friends or via memcpy_io/memset_io. This was already required
>>>> before, but some drivers that didn't do this were lucky enough to fly under
>>>> the radar. At least for remoteproc, this seems no longer the case.
>>>>
>>>> I just Cc'd you on a patch to fix this for remoteproc.
>>>> Please let me know with a Tested-by if this resolves your issue.
>>>>
>>>> Cheers,
>>>> Ahmad
>>>>
>>>>>
>>>>> Thank you.
>>>>>
>>>>> Best,
>>>>> Stefano
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Pengutronix e.K.                           |                             |
>>>> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
>>>> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
>>>> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
>>>
>>
>>
>> --
>> Pengutronix e.K.                           |                             |
>> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
>> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
>> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 


-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: firmwareload fails for cortex-m7 on imx8mp
  2024-11-19  9:03         ` Ahmad Fatoum
@ 2024-11-19 10:40           ` Stefano Manni
  2024-11-19 11:29             ` Ahmad Fatoum
  0 siblings, 1 reply; 8+ messages in thread
From: Stefano Manni @ 2024-11-19 10:40 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

Il giorno mar 19 nov 2024 alle ore 10:03 Ahmad Fatoum
<a.fatoum@pengutronix.de> ha scritto:
>
> I am surprised it works for you in Linux. To get it working with barebox:
>
>  1) run iomem and note where your malloc area begins. Set CONFIG_MALLOC_SIZE,
>     so it starts after 0x90000000
>
>  2) Add the following to your DT:
>
> &{/reserved-memory} {
>         rproc_reserved: rproc@80000000 {
>                 reg = <0 0x80000000 0 0x10000000>;
>         };
> };
>
> &remoteproc_cm7 {
>         memory-region = <&rproc_reserved>;
> };
>
> Do you not have an equivalent memory-region definition in your kernel DT?

Yes, I have. Adding rproc_reserved to barebox as in kernel DT it fixes
the issue.

>
>  3) I found some issues that I just Cc'd you on the fixes for. They may not be
>     necessary for the simple hello-ddr.elf example though.

Do you need that I test them?

Thank you.
Best,
Stefano



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: firmwareload fails for cortex-m7 on imx8mp
  2024-11-19 10:40           ` Stefano Manni
@ 2024-11-19 11:29             ` Ahmad Fatoum
  0 siblings, 0 replies; 8+ messages in thread
From: Ahmad Fatoum @ 2024-11-19 11:29 UTC (permalink / raw)
  To: Stefano Manni; +Cc: barebox

Hello Stefano,

On 19.11.24 11:40, Stefano Manni wrote:
> Il giorno mar 19 nov 2024 alle ore 10:03 Ahmad Fatoum
> <a.fatoum@pengutronix.de> ha scritto:
>>
>> I am surprised it works for you in Linux. To get it working with barebox:
>>
>>  1) run iomem and note where your malloc area begins. Set CONFIG_MALLOC_SIZE,
>>     so it starts after 0x90000000
>>
>>  2) Add the following to your DT:
>>
>> &{/reserved-memory} {
>>         rproc_reserved: rproc@80000000 {
>>                 reg = <0 0x80000000 0 0x10000000>;
>>         };
>> };
>>
>> &remoteproc_cm7 {
>>         memory-region = <&rproc_reserved>;
>> };
>>
>> Do you not have an equivalent memory-region definition in your kernel DT?
> 
> Yes, I have. Adding rproc_reserved to barebox as in kernel DT it fixes
> the issue.

Great. :)

>>
>>  3) I found some issues that I just Cc'd you on the fixes for. They may not be
>>     necessary for the simple hello-ddr.elf example though.
> 
> Do you need that I test them?

I have already tested that they don't break anything using the ELF
file you provided, so this is just a heads up if you run into
further problems with different firmware ELF files.

Cheers,
Ahmad

> 
> Thank you.
> Best,
> Stefano
> 


-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-11-19 11:30 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-11-15 13:43 firmwareload fails for cortex-m7 on imx8mp Stefano Manni
2024-11-15 14:02 ` Ahmad Fatoum
2024-11-15 14:47   ` Stefano Manni
2024-11-15 14:49     ` Ahmad Fatoum
2024-11-15 15:01       ` Stefano Manni
2024-11-19  9:03         ` Ahmad Fatoum
2024-11-19 10:40           ` Stefano Manni
2024-11-19 11:29             ` Ahmad Fatoum

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox