iMX7D M4 and A7 linux freeze

Dear all

I struggle to start linux on the A7 cores and the example software form the FreeRTOS BSP for i.MX 7Dual V1.0.1 (such as hello_world.elf, pingpong_bm.elf) on the M4 core at the same time. The linux kernel stops after the output Starting kernel ...). We had already a working configuration with M4 and A7 together, but sadly I tried something with the partitions and then I had to reinstall the whole system with the EasyInstaller and then I can’t get back the working configuration.

My configuration is based on the Toradex getting started.

First I installed the Toradex 2.8.4 Linux (2018_10_05) with the EasyInstaller.
Then I saved the pingpong_bm.elf from Linux with

root@colibri-imx7:~# ubiupdatevol /dev/ubi0_2 pingpong_bm.elf

In u-boot i set the following environment settings:

Colibri iMX7 # setenv defargs clk_ignore_unused
Colibri iMX7 # setenv fdt_fixup 'fdt addr ${fdt_addr_r} && fdt rm /soc/aips-bus@30800000/spba-bus@30800000/serial@30890000'
Colibri iMX7 # setenv m4boot 'ubi read ${loadaddr} m4firmware && bootaux ${loadaddr}'
Colibri iMX7 # saveenv

Then I boot the system and get the following outputs:

U-Boot 2016.11 (Dec 05 2018 - 19:49:37 +0100)                                                                                                               
                                                                                                                                                            
CPU:   Freescale i.MX7D rev1.2 996 MHz (running at 792 MHz)                                                                                                 
CPU:   Extended Commercial temperature grade (-20C to 105C) at 24C                                                                                          
Reset cause: POR                                                                                                                                            
DRAM:  512 MiB                                                                                                                                              
PMIC:  RN5T567 LSIVER=0x01 OTPVER=0x0d                                                                                                                      
NAND:  512 MiB                                                                                                                                              
MMC:   FSL_SDHC: 0                                                                                                                                          
Video: 640x480x18                                                                                                                                           
In:    serial                                                                                                                                               
Out:   serial                                                                                                                                               
Err:   serial                                                                                                                                               
Model: Toradex Colibri iMX7 Dual 512MB V1.1C, Serial# 02928111                                                                                              
Net:   FEC0                                                                                                                                                 
Hit any key to stop autoboot:  0                                                                                                                            
Booting from NAND...                                                                                                                                        
ubi0: default fastmap pool size: 200                                                                                                                        
ubi0: default fastmap WL pool size: 100                                                                                                                     
ubi0: attaching mtd1                                                                                                                                        
ubi0: attached by fastmap                                                                                                                                   
ubi0: fastmap pool size: 200                                                                                                                                
ubi0: fastmap WL pool size: 100                                                                                                                             
ubi0: attached mtd1 (name "mtd=4", size 508 MiB)                                                                                                            
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes                                                                                              
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048                                                                                               
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096                                                                                             
ubi0: good PEBs: 4060, bad PEBs: 4, corrupted PEBs: 0                                                                                                       
ubi0: user volume: 4, internal volumes: 1, max. volumes count: 128                                                                                          
ubi0: max/mean erase counter: 6/3, WL threshold: 4096, image sequence number: 1504894635                                                                    
ubi0: available PEBs: 0, total reserved PEBs: 4060, PEBs reserved for bad PEB handling: 76                                                                  
No size specified -> Using max size (50236)                                                                                                                 
Read 50236 bytes from volume m4firmware to 80800000                                                                                                         
## Starting auxiliary core at 0x009100B5 ...                                                                                                                
No size specified -> Using max size (5566712)                                                                                                               
Read 5566712 bytes from volume kernel to 81000000                                                                                                           
No size specified -> Using max size (45033)                                                                                                                 
Read 45033 bytes from volume dtb to 82000000                                                                                                                
Kernel image @ 0x81000000 [ 0x000000 - 0x54f0f8 ]                                                                                                           
## Flattened Device Tree blob at 82000000                                                                                                                   
   Booting using the fdt blob at 0x82000000                                                                                                                 
   Loading Device Tree to 8fff2000, end 8fffffe8 ... OK                                                                                                     
   Updating MTD partitions...                                                                                                                               
                                                                                                                                                            
Starting kernel ...           

If I only starts an example like hello_world.elf without starting the A7 cores, it works fine.

Colibri iMX7 # fatload mmc 0:1 ${loadaddr} hello_world.elf
Colibri iMX7 # bootaux ${loadaddr}

Also if I only starts the A7 core without the M4 core it works.
I have also tested this on a second colibri iMX7d module an with a self compiled version of the Toradex kernel (Toradex Getting Started - Build U-Boot and Linux Kernel from Source Code) without success.

Do you have any idea what I missed?

Thank you in advance!
freip2

Dear @freip2

Thank you for reporting the issue. We were able to detect the reason:
In Linux BSP release V2.8b4 we relocate the device tree, which then conflicts with a memory range that U-Boot reserves for the M4 firmware. We will fix that in future releases.

Meanwhile you can avoid the relocation by entering the following U-Boot commands:

Colibri iMX7 # setenv fdt_high = 0xffffffff
Colibri iMX7 # saveenv

This failure happens only on the Colibri iMX7D. The Colibri iMX7S with 256MB RAM does not show the issue.

Regards, Andy

Dear andy.tx

Thank you a lot for the fast workaround. Now it works.

Regards, Pascal

Hi Guys

Thank you, I had the same problem. Please can you adapt your tutorial at FreeRTOS on the Cortex-M4 of a Colibri iMX7 | Toradex Developer Center with hint to change the fdt_high size.

BR
Eugen

Hi @eugen83

Thanks for your feedback.
We will correct the documentation. In the new Bsp the variable fdt_high should be already set correctly.

Best regards,
Jaski