1*7d436078SPrabhakar Kushwaha /* 2*7d436078SPrabhakar Kushwaha * Copyright 2013 Freescale Semiconductor, Inc. 3*7d436078SPrabhakar Kushwaha * 4*7d436078SPrabhakar Kushwaha * SPDX-License-Identifier: GPL-2.0+ 5*7d436078SPrabhakar Kushwaha */ 6*7d436078SPrabhakar Kushwaha 7*7d436078SPrabhakar Kushwaha #ifndef __DDR_H__ 8*7d436078SPrabhakar Kushwaha #define __DDR_H__ 9*7d436078SPrabhakar Kushwaha struct board_specific_parameters { 10*7d436078SPrabhakar Kushwaha u32 n_ranks; 11*7d436078SPrabhakar Kushwaha u32 datarate_mhz_high; 12*7d436078SPrabhakar Kushwaha u32 rank_gb; 13*7d436078SPrabhakar Kushwaha u32 clk_adjust; 14*7d436078SPrabhakar Kushwaha u32 wrlvl_start; 15*7d436078SPrabhakar Kushwaha u32 wrlvl_ctl_2; 16*7d436078SPrabhakar Kushwaha u32 wrlvl_ctl_3; 17*7d436078SPrabhakar Kushwaha u32 cpo; 18*7d436078SPrabhakar Kushwaha u32 write_data_delay; 19*7d436078SPrabhakar Kushwaha u32 force_2t; 20*7d436078SPrabhakar Kushwaha }; 21*7d436078SPrabhakar Kushwaha 22*7d436078SPrabhakar Kushwaha /* 23*7d436078SPrabhakar Kushwaha * These tables contain all valid speeds we want to override with board 24*7d436078SPrabhakar Kushwaha * specific parameters. datarate_mhz_high values need to be in ascending order 25*7d436078SPrabhakar Kushwaha * for each n_ranks group. 26*7d436078SPrabhakar Kushwaha */ 27*7d436078SPrabhakar Kushwaha 28*7d436078SPrabhakar Kushwaha static const struct board_specific_parameters udimm0[] = { 29*7d436078SPrabhakar Kushwaha /* 30*7d436078SPrabhakar Kushwaha * memory controller 0 31*7d436078SPrabhakar Kushwaha * num| hi| rank| clk| wrlvl | wrlvl | wrlvl | cpo |wrdata|2T 32*7d436078SPrabhakar Kushwaha * ranks| mhz| GB |adjst| start | ctl2 | ctl3 | |delay | 33*7d436078SPrabhakar Kushwaha */ 34*7d436078SPrabhakar Kushwaha {2, 1350, 4, 4, 8, 0x0809090b, 0x0c0c0d0a, 0xff, 2, 0}, 35*7d436078SPrabhakar Kushwaha {2, 1350, 0, 5, 7, 0x0709090b, 0x0c0c0d09, 0xff, 2, 0}, 36*7d436078SPrabhakar Kushwaha {2, 1666, 4, 4, 8, 0x080a0a0d, 0x0d10100b, 0xff, 2, 0}, 37*7d436078SPrabhakar Kushwaha {2, 1666, 0, 5, 7, 0x080a0a0c, 0x0d0d0e0a, 0xff, 2, 0}, 38*7d436078SPrabhakar Kushwaha {2, 1900, 0, 4, 8, 0x090a0b0e, 0x0f11120c, 0xff, 2, 0}, 39*7d436078SPrabhakar Kushwaha {2, 2140, 0, 4, 8, 0x090a0b0e, 0x0f11120c, 0xff, 2, 0}, 40*7d436078SPrabhakar Kushwaha {1, 1350, 0, 5, 8, 0x0809090b, 0x0c0c0d0a, 0xff, 2, 0}, 41*7d436078SPrabhakar Kushwaha {1, 1700, 0, 5, 8, 0x080a0a0c, 0x0c0d0e0a, 0xff, 2, 0}, 42*7d436078SPrabhakar Kushwaha {1, 1900, 0, 4, 8, 0x080a0a0c, 0x0e0e0f0a, 0xff, 2, 0}, 43*7d436078SPrabhakar Kushwaha {1, 2140, 0, 4, 8, 0x090a0b0c, 0x0e0f100b, 0xff, 2, 0}, 44*7d436078SPrabhakar Kushwaha {} 45*7d436078SPrabhakar Kushwaha }; 46*7d436078SPrabhakar Kushwaha 47*7d436078SPrabhakar Kushwaha static const struct board_specific_parameters *udimms[] = { 48*7d436078SPrabhakar Kushwaha udimm0, 49*7d436078SPrabhakar Kushwaha }; 50*7d436078SPrabhakar Kushwaha #endif 51