imx53 memory detection

Sascha Hauer s.hauer at pengutronix.de
Tue Apr 12 23:36:49 PDT 2016


Hi Jason,

On Tue, Apr 12, 2016 at 10:08:01PM -0700, Jason Cobham wrote:
> Support for Barebox on the Digi connectcore imx53 board stopped
> working recently. I believe the memory detection never worked properly
> to begin with. I've re-factored lowlevel.c to match similar mx53
> boards, however the ram size is always detected incorrectly.

So you replaced barebox_arm_entry with imx53_barebox_entry, right? What
memory size do you have and what size gets detected then?

> I have a
> reliable way of detecting the board memory size in device_initcall.
> 
> I've tried adding mem_initcall/arm_add_mem_device() however mmu
> support causes a panic when enabled. without mmu support enabled, the
> board boots with the correct memory size however I get an error,
> "Cannot request SDRAM region for stack".
> 
> I've tried to use the freescale loco/qsb as a template since the digi
> board is similar, but I don't see where it's memory size is defined. I
> assume it's automatically detected.

Yes, it's read back from the memory controller in arch/arm/mach-imx/esdctl.c.

The whole approach goes like this:

- The SDRAM controller is configured by board specific lowlevel code (or
  DCD data)
- barebox_arm_entry() is called with some memory passed to it. This can be
  the full memory of the board, but doesn't necessarily have to be. It
  is only the memory barebox will use for itself, stack, malloc area.
  imx53_barebox_entry() is a shortcut which reads back the SDRAM
  controller settings to automatically detect SDRAM size and which calls
  barebox_arm_entry() with the result.
- during mem_initcall the imx-esdctl driver is registered. This driver
  again reads back the SDRAM controller settings and registers memory
  banks according to the settings.
- Also during mem_initcall the memory areas specified in the device tree
  are registered.

If there are conflicts between the different banks then the first one
wins. If then the MMU code later detects that the SDRAM passed to
barebox_arm_entry() is actually bigger than the memory registered in the
memory banks it can have undesired results.


As a first step you should remove the /memory node in
arch/arm/dts/imx53-ccxmx53.dtsi. Since there are different possible
memory setups for this board it is wrong anyway. Then it would be
interesting what imx_esdctl_v4_add_mem() detects. I believe it should be
possible to fix it if it detects the wrong memory size.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list