Skip to content


The Ten64 board supports DDR4 SODIMM's with (and without) ECC running at 2100MT/sec (faster sticks are generally backwards-compatible).

The LS1088 DDR controller is generally designed for embedded use cases, hence it requires data about the memory devices before hand to set up its timing and write levelling mechanisms.

Support for SO-DIMM's is based on the JEDEC PCB reference design (also called "Raw Card"). At the time of writing JEDEC has released designs A through to K, but only a few are used in practice (especially for speeds >=2666MT/s). Most reference designs have more than one version, as higher DDR4 speeds require tighter timing margins.

Generally Traverse stocks Innodisk brand memory, but we will implement support for other vendors and models on request. Ten64's purchased in the crowdfunding campaign came furnished with Kingston ECC modules.

If you are looking for an ECC SO-DIMM to purchase from retail distributors, we recommend Kingston as these are easy to find and tend not to have compatibility issues.

List of tested SO-DIMM's:

Manufacturer Model Size ECC Advertised Speed Comments / Datasheet (if any)
Kingston KSM32SES8/8HD 8GB YES 3200 Kingston datasheet
Kingston KSM32SES8/8MR 8GB YES 3200 Kingston datasheet
Kingston KSM32SES8/16HC 16GB YES 3200 Kingston datasheet
Kingston KSM32SED8/16HD 16GB YES 3200 Kingston datasheet
Kingston KSM32SED8/32HC 32GB YES 3200 Kingston datasheet
Innodisk M4D0-4GSSPCIK 4GB YES 2666
Innodisk M4D0-8GS1PCRG 8GB YES 2133
Innodisk M4D0-8GS1ICIK 8GB YES 2666 This is a "very low profile" SO-DIMM suitable for height-constrained applications
Innodisk M4D0-AGS1QCRG 16GB YES 2133
Innodisk M4D0-BGS2QCIK 32GB YES 2666
Kingston KVR24S17S6/4 4GB NO 2400 Kingston Website
Kingston KSM26SES8/8HD 8GB YES 2666 (Discontinued?) Kingston Website
Kingston KSM26SES8/16ME 16GB YES 2666 (Discontinued?) Kingston Website
Kingston KSM26SED8/16HD 16GB YES 2666 (Discontinued?) Kingston Website
Kingston KSM26SED8/32ME 32GB YES 2666 (Discontinued?) Kingston Website
Kingston KSM29SED8/32ME
32GB YES 2933 (Discontinued?) Kingston Website. KTL-TN429E/32G is an identical part intended as a substitute for Lenovo systems
Micron MTA18ASF2G72HZ-2G6E1ZK 16GB YES 2666 Also known as Crucial CT16G4TFD8266. Datasheet on (login required), previous model is ref card H not tested
Micron MTA8ATF1G64HZ-2G6E1 8GB NO 2666 product page
Crucial CT4G4SFS8266.C8FE 4GB NO 2666 Crucial Website, does not have a corresponding Micron OEM version. SPD contains incorrect DQ byte mappings, fixed in firmware. (Tsk tsk Crucial!)
Crucial CT8G4SFS824A.C8FN 8GB NO 2400 Crucial Website
Crucial CT16G4SFD824A.C16FDD1 16GB NO 2400 Crucial Website
Crucial CT32G4SFD8266.C16FB 32GB NO 2666 Crucial Website
Samsung M471A4G43MB1-CTD 32GB NO 2666 Samsung Website

Tip: The Ref card version can be found in the standard JEDEC model ID that is on the label of most cards, for example:

  • Samsung M471A4G43MB1-CTD: PC4-2666V-S E1 -11
  • Micron MTA18ASF2G72HZ-2G6E1ZK: PC4-2666V-T G1 -11

When BL2/TF is compiled in debug mode, the raw card parameter will be printed out at boot:

INFO:    platform clock 700000000
INFO:    DDR PLL 2100000000
INFO:    time base 11 ms
INFO:    Parse DIMM SPD(s)
INFO:    n_ranks 2
INFO:    rank_density 0x400000000
INFO:    capacity 0x800000000
INFO:    die density 0x6
INFO:    primary_sdram_width 64
INFO:    ec_sdram_width 0
INFO:    device_width 8
INFO:    package_3ds 0
INFO:    rc 0x24 (Raw card E1)
INFO:    rdimm 0
INFO:    mirrored_dimm 1
INFO:    n_row_addr 17
INFO:    n_col_addr 10

Despite support for most reference designs being implemented, we have found quite a few memory modules ship with incorrect data in their EEPROM (SPD), requiring workarounds in our memory init code. If an unimplemented SO-DIMM fails to boot despite support for the reference design in BL2, we can usually determine the cause of the problem from the full (debug) boot log.

Adding support for new SO-DIMM's / raw cards

The following parameters are needed to support a SO-DIMM card:

  • JEDEC raw card ID
  • Clock adjust and base write level values (for the first byte lane)
  • Write level values for the remaining byte lanes

The clock adjust and write level values are found via NXP's CodeWarrior QCVS DDR tool - which determines the most stable values by iteration on the actual hardware. In theory, you could try and determine these intuitively based on the DIMM net lengths - but we don't recommend this!

These are put into a table in the Trusted Firmware ddr_init.c.