u-boot on i.MX35 dies with drive strength enabled (booting Linux)

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

u-boot on i.MX35 dies with drive strength enabled (booting Linux)

1,905 Views
udragon
Contributor I
Hi,

I have a custom board that requires the drive-strength to be set to minimum.

In order to achieve this I enable  'init_drive_strength' in lowlevel_init.S

This al builds fine, however when I boot there's no output except one 0x00.

We've debugged it ant it looks that we get a prefetch abort exception.
U-boot seems to be executing things outside internal SRAM.

As a test we disabled some other lesser important things (e.g init_debug_board) and then rebuild it and this seems to work.

Since all u-boot binaries (even the default ltib build) are larger than 160k and the internal i.MX35 has only 128k internal ram I wonder why this ever worked.

Are my assumption correct or am I missing something ?
How do you guys boot i.MX35 for Linux ?

Thanks.

NOTE : I also tested all of the above on the original 3-stack platform and this gives the same results.


Tags (1)
0 Kudos
Reply
5 Replies

1,700 Views
JesseBeeker
Contributor III
Nice work.
0 Kudos
Reply

1,700 Views
udragon
Contributor I
Hi, We managed to fix it ! The problem is that the i.MX35 internal ROM bootloader only loads the size of the page defined by the straps. Since our external NAND has a 2k pagesize, the MX35 only loads 2k in the NFC buffer. This is ok for the u-boot that comes with ltib, however as soon as you enable the init_drive_strength code in lowlevel_init.S the image size grows, moving mxc_nand_load beyond the 2k boundary. Having incomplete code in the buffer results in a nice abort ;-) The WinCE BSP solution for mx35 does not have this issue since it uses x-loader (xlrdr) which has a much smaller footprint than u-boot.
0 Kudos
Reply

1,700 Views
JesseBeeker
Contributor III
I am not sure of the exact location but you should be able to prove where the execution is in the Flash header. Table 7-8 in the reference manual has the variable names to search for in the Uboot code.
0 Kudos
Reply

1,700 Views
udragon
Contributor I
Ok, thanks info. However, if I'm correct, a part of U-boot is running from SRAM first, then initializing DDRAM and other peripherals, after that the main part of u-boot gets copied to DDRAM and it jumps to the DDRAM entrypoint. I've checked the DCD commands before but they don't seem to be linked in the iMX35 u-boot build. It's the output on the serial port I was refering to. Jesse Beeker said:
Unless you have things set up very custom, Uboot runs from DRAM not internal SRAM. If you are having boot issues and you need the low drive strength, this is done with DCD commands in the boot header file. Usually, you can get Uboot to run without this, but if you need specific/optimized DRAM configuration when you boot, you must use the DCDs.
What do you mean by no output except 0x00? Output on what?
0 Kudos
Reply

1,700 Views
JesseBeeker
Contributor III
Unless you have things set up very custom, Uboot runs from DRAM not internal SRAM. If you are having boot issues and you need the low drive strength, this is done with DCD commands in the boot header file. Usually, you can get Uboot to run without this, but if you need specific/optimized DRAM configuration when you boot, you must use the DCDs. What do you mean by no output except 0x00? Output on what?
0 Kudos
Reply