For the complete documentation index, see llms.txt. This page is also available as Markdown.

Add support for i.MX6 Solo with 1GB DDR

Build SolidRun U-Boot for the i.MX6 Solo microSOM with 1GB DDR3.

Overview

The SolidRun i.MX6 Solo microSOM ships in two DRAM assemblies:

  • the standard 512MB consumer assembly (2Gbit-density DDR3), and

  • a 1GB assembly built from 4Gbit-density industrial memory modules.

This page shows how to build U-Boot firmware that drives the 1GB assembly, using the CONFIG_MX6SOLO_1GB_DDR build option in the mx6cuboxi board.

Applies to: SolidRun i.MX6 Solo microSOM with 1GB DDR, SolidRun U-Boot tree (v2018.01-solidrun-imx6 and equivalent branches), board target mx6cuboxi.

Revision and Notes

Date

Owner

Revision

Notes

9 Jun 2026

Yazan

1.0

Initial release

How DRAM is configured

During the SPL stage, the i.MX6 memory controller (MMDC) is initialized from a fixed configuration chosen by SoC type. Each variant pairs a calibration table (tuned to the SoM trace layout) with a chip-geometry description:

// board/solidrun/mx6cuboxi/mx6cuboxi.c — spl_dram_init()
if      (is_cpu_type(MXC_CPU_MX6D))    // Dual      → 1GB
    mx6_dram_cfg(&sysinfo, &mx6q_1g_mmcd_calib,  &mem_ddr_2g);
else if (is_cpu_type(MXC_CPU_MX6Q))    // Quad      → 2GB
    mx6_dram_cfg(&sysinfo, &mx6q_2g_mmcd_calib,  &mem_ddr_4g);
else if (is_cpu_type(MXC_CPU_MX6DL))   // DualLite  → 1GB
    mx6_dram_cfg(&sysinfo, &mx6dl_1g_mmcd_calib, &mem_ddr_2g);
else if (is_cpu_type(MXC_CPU_MX6SOLO)) // Solo      → 512MB
    mx6_dram_cfg(&sysinfo, &mx6dl_512m_mmcd_calib, &mem_ddr_2g);

The Solo path uses the 512MB consumer geometry (mem_ddr_2g, a 2Gbit-density chip on a 32-bit bus). The 1GB assembly needs a different geometry: a 4Gbit-density chip with a 15-bit row address.

How the option works

The 512MB and 1GB Solo SoMs share the same PCB layout — only the DRAM die density changes. Because the MMDC calibration (write-leveling, DQS gating, read/write delays) is governed by PCB trace lengths, the proven Solo calibration (mx6dl_512m_mmcd_calib) is reused, and only the chip geometry is swapped for the 4Gbit description.

The selection is a compile-time option, CONFIG_MX6SOLO_1GB_DDR:

  • Off (default): firmware is identical to the standard build.

  • On: the Solo path is programmed for the 1GB assembly.

Memory geometry

mem_ddr_solo_4g describes a 4Gbit ×16 DDR3 device:

Field
Value
Meaning

density

4

4Gbit per device

width

16

×16 device

banks

8

8 banks

rowaddr

15

2¹⁵ rows (JEDEC value for 4Gb ×16)

coladdr

10

2¹⁰ columns

Per device: 2¹⁵ × 2¹⁰ × 8 × 16 bits = 4Gbit = 512MB. On the Solo's 32-bit bus (two ×16 devices) → 1GB.

Source changes

Build the firmware

1. Apply the patch

2. Enable CONFIG_MX6SOLO_1GB_DDR

3. Flash

Verify

On the U-Boot console, confirm the full 1GB is mapped and stable:

Run a clean mtest (and, under Linux, memtester 900M) on the 1GB hardware to confirm the reused calibration trains correctly on the industrial 4Gb parts. The 512MB and 1GB SoMs share the same PCB, so this is expected to pass — validate it once before shipping a production image.

Last updated