blob: 0aff1e8727efc26934034c60c23de52c95c1e20c [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2022 StarFive Technology Co., Ltd.
* Author: Yanhong Wang<yanhong.wang@starfivetech.com>
*/
#include <linux/kernel.h>
#include <asm/io.h>
static const u32 ddr_train_data[] = {
0xb00,
0x101,
0x640000,
0x1,
0x0,
0x0,
0x0,
0x0,
0x1,
0x7,
0x10002,
0x300080f,
0x1,
0x5,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0,
0x1010000,
0x280a0000,
0x0,
0x1,
0x3200000f,
0x0,
0x0,
0x10102,
0x1,
0x0,
0x0,
0x0,
0xaa,
0x55,
0xb5,
0x4a,
0x56,
0xa9,
0xa9,
0xb5,
0x1000000,
0x1000000,
0x0,
0xf0f0000,
0x14,
0x7d0,
0x300,
0x0,
0x0,
0x1000000,
0x10101,
0x0,
0x30000,
0x100,
0x170f,
0x0,
0x0,
0x0,
0xa140a01,
0x204010a,
0x2080510,
0x40400,
0x1000101,
0x10100,
0x2040f00,
0x34000000,
0x0,
0x0,
0x1000000,
0x0,
0x0,
0x0,
0x0,
0x10100,
0x80101,
0x2000200,
0x1000100,
0x1000000,
0x2000200,
0x200,
0x0,
0x0,
0x0,
0xe000004,
0xc0d100f,
0xa09080b,
0x2010000,
0x80103,
0x200,
0x0,
0xf000000,
0x4,
0xa,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0,
0x30100,
0x1010001,
0x10200,
0x4000103,
0x1050001,
0x10600,
0x107,
0x0,
0x0,
0x10001,
0x0,
0x0,
0x0,
0x0,
0x10000,
0x4,
0x0,
0x10000,
0x0,
0x3c0003,
0x80100a0,
0x16,
0x2c,
0x33,
0x20043,
0x2000200,
0x4,
0x60c,
0xa1400,
0x280000,
0x6,
0x46,
0x70,
0x610,
0x12b,
0x4001035,
0x1010404,
0x1e01,
0x1e001e,
0x1000100,
0x100,
0x0,
0x5060403,
0x1011108,
0x1010101,
0xf0a0a,
0x0,
0x0,
0x4000000,
0x4021008,
0x4020206,
0xc0034,
0x100038,
0x17003f,
0x10001,
0x10001,
0x10005,
0x20064,
0x100010b,
0x60006,
0x650100,
0x1000065,
0x10c010c,
0x1e1a1e1a,
0x1011e1a,
0xa070601,
0xa07060d,
0x100b080d,
0xc00f,
0xc01000,
0xc01000,
0x21000,
0x120005,
0x190064,
0x10b,
0x1100,
0x1e1a0056,
0x6000101,
0x130204,
0x1e1a0058,
0x1000101,
0x230408,
0x1e1a005e,
0x9000101,
0x610,
0x4040800,
0x40100,
0x3000277,
0xa032001,
0xa0a,
0x80908,
0x901,
0x1100315c,
0xa062002,
0xa0a,
0x141708,
0x150d,
0x2d00838e,
0xf102004,
0xf0b,
0x8c,
0x578,
0xc20,
0x7940,
0x206a,
0x14424,
0x730006,
0x3030133,
0x4,
0x0,
0x4,
0x1,
0x5,
0x2,
0x6,
0x50,
0x1,
0x5,
0x28,
0x73,
0xd6,
0x1,
0x5,
0x6b,
0x1000133,
0x140040,
0x10001,
0x1900040,
0x1000c,
0x42b0040,
0x320,
0x360014,
0x1010101,
0x2020101,
0x8080404,
0x67676767,
0x67676767,
0x67676767,
0x67676767,
0x0,
0x0,
0x0,
0x0,
0x0,
0x5500,
0x5a00,
0x55003c,
0x0,
0x3c00005a,
0x5500,
0x5a00,
0x55003c,
0x0,
0x3c00005a,
0x18171615,
0x14131211,
0x7060504,
0x3020100,
0x0,
0x0,
0x0,
0x1000000,
0x4020201,
0x80804,
0x0,
0x4,
0x0,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x14,
0x9,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x34,
0x1b,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x4,
0x0,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x14,
0x9,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x34,
0x1b,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x4,
0x0,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x14,
0x9,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x34,
0x1b,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x4,
0x0,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x14,
0x9,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
0x0,
0x34,
0x1b,
0x31,
0x31,
0x0,
0x0,
0x4d4d,
};
void ddr_phy_train(u32 *phyreg)
{
u32 i, len;
len = ARRAY_SIZE(ddr_train_data);
for (i = 0; i < len; i++)
out_le32(phyreg + i, ddr_train_data[i]);
}