| // 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]); | |
| } |