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