summaryrefslogtreecommitdiff
path: root/board/freescale/imx8mm_evk/ddr/ddr4/ddr4_define.h
blob: f81603cc48808708faf7d9670f2cf4199f27145f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
 * Copyright 2018 NXP
 *
 * SPDX-License-Identifier: GPL-2.0+
 */

#ifndef __DDR4_CONFIG_H__
#define __DDR4_CONFIG_H__

#include "../ddr.h"

#define DDR_ONE_RANK
#define RUN_ON_SILICON
#define DDR4_SW_FFC
#define ENABLE_RETENTION

#define DRAM_VREF 0x1f

#define SAVE_DDRPHY_TRAIN_ADDR 0x184000

/* choose p2 state data rate, define just one of below macro */
#define PLLBYPASS_400MBPS

/* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
/* for DDR4 */
/* Note:DQ SI RON=40ohm, RTT=48ohm */
/*      CA SI RON=40ohm, RTT=65ohm */
/* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
/* for DDR RTT NOM/PARK */
#define DDR4_ODT_DIS 0
#define DDR4_ODT_60  1
#define DDR4_ODT_120 2
#define DDR4_ODT_40  3
#define DDR4_ODT_240 4
#define DDR4_ODT_48  5
#define DDR4_ODT_80  6
#define DDR4_ODT_34  7

/* for DDR RON */
#define DDR4_RON_34  0
#define DDR4_RON_48  1
#define DDR4_RON_40  2
#define DDR4_RON_RES 3

/* for DDR RTT write */
#define DDR4_RTT_WR_DIS 0
#define DDR4_RTT_WR_120 1
#define DDR4_RTT_WR_240 2
#define DDR4_RTT_WR_HZ  3
#define DDR4_RTT_WR_80  4

/* for DDR4 PHY data RON */
#define DDR4_PHY_DATA_RON_34    0xeba
#define DDR4_PHY_DATA_RON_40    0xe38
#define DDR4_PHY_DATA_RON_48    ((0x1a << 6) | 0x1a)
#define DDR4_PHY_DATA_RON_60    ((0x18 << 6) | 0x18)
#define DDR4_PHY_DATA_RON_80    ((0x0a << 6) | 0x0a)
#define DDR4_PHY_DATA_RON_120   ((0x08 << 6) | 0x08)
#define DDR4_PHY_DATA_RON_240   ((0x02<<6)|0x02)

/* for DDR4 PHY data RTT */
#define DDR4_PHY_DATA_RTT_34    0x3a
#define DDR4_PHY_DATA_RTT_40    0x38
#define DDR4_PHY_DATA_RTT_48    0x1a
#define DDR4_PHY_DATA_RTT_60    0x18
#define DDR4_PHY_DATA_RTT_80    0x0a
#define DDR4_PHY_DATA_RTT_120   0x08
#define DDR4_PHY_DATA_RTT_240   0x02

/* for DDR4 PHY address RON */
#define DDR4_PHY_ADDR_RON_30    ((0x07 << 5) | 0x07)
#define DDR4_PHY_ADDR_RON_40    0x63
#define DDR4_PHY_ADDR_RON_60    ((0x01 << 5) | 0x01)
#define DDR4_PHY_ADDR_RON_120   ((0x00 << 5) | 0x00)

#define DDR4_PHY_ADDR_RON DDR4_PHY_ADDR_RON_40

/* read DDR4 */
#ifdef DDR_ONE_RANK
#define DDR4_RON            DDR4_RON_34
#define DDR4_PHY_DATA_RTT   DDR4_PHY_DATA_RTT_48
#define DDR4_PHYREF_VALUE   91
#else
#define DDR4_RON            DDR4_RON_40
#define DDR4_PHY_DATA_RTT   DDR4_PHY_DATA_RTT_48
#define DDR4_PHYREF_VALUE   93
#endif

/* write DDR4 */
#ifdef DDR_ONE_RANK
/* one lank */
#define DDR4_PHY_DATA_RON DDR4_PHY_DATA_RON_34
#define DDR4_RTT_NOM      DDR4_ODT_60
#define DDR4_RTT_WR       DDR4_RTT_WR_DIS
#define DDR4_RTT_PARK     DDR4_ODT_DIS
#define DDR4_MR6_VALUE    0x0d
#else
/* two lank */
#define DDR4_PHY_DATA_RON DDR4_PHY_DATA_RON_40
#define DDR4_RTT_NOM      DDR4_ODT_60
#define DDR4_RTT_WR       DDR4_RTT_WR_DIS
#define DDR4_RTT_PARK     DDR4_ODT_DIS
#define DDR4_MR6_VALUE    0x10
#endif

/* voltage:delay */
#define DDR4_2D_WEIGHT (31 << 8 | 127)

#define ANAMIX_PLL_BASE_ADDR         0x30360000
#define HW_DRAM_PLL_CFG0_ADDR (ANAMIX_PLL_BASE_ADDR + 0x60)
#define HW_DRAM_PLL_CFG1_ADDR (ANAMIX_PLL_BASE_ADDR + 0x64)
#define HW_DRAM_PLL_CFG2_ADDR (ANAMIX_PLL_BASE_ADDR + 0x68)
#define GPC_PU_PWRHSK 0x303A01FC
#define GPC_TOP_CONFIG_OFFSET        0x0000
#define AIPS1_ARB_BASE_ADDR             0x30000000
#define AIPS_TZ1_BASE_ADDR              AIPS1_ARB_BASE_ADDR
#define AIPS1_OFF_BASE_ADDR             (AIPS_TZ1_BASE_ADDR + 0x200000)
#define CCM_IPS_BASE_ADDR              (AIPS1_OFF_BASE_ADDR + 0x180000)
#define CCM_SRC_CTRL_OFFSET     (CCM_IPS_BASE_ADDR + 0x800)
#define CCM_SRC_CTRL(n)             (CCM_SRC_CTRL_OFFSET + 0x10 * n)


#define dwc_ddrphy_apb_wr(addr, data)  reg32_write(IP2APB_DDRPHY_IPS_BASE_ADDR(0) + 4 * (addr), data)
#define dwc_ddrphy_apb_rd(addr)        (reg32_read(IP2APB_DDRPHY_IPS_BASE_ADDR(0) + 4 * (addr)))
#define  reg32clrbit(addr, bitpos)       reg32_write((addr), (reg32_read((addr)) & (0xFFFFFFFF ^ (1 << (bitpos)))))
#define DDR_CSD1_BASE_ADDR 0x40000000
#define DDR_CSD2_BASE_ADDR 0x80000000

void restore_1d2d_trained_csr_ddr4_p012(unsigned int addr);
void save_1d2d_trained_csr_ddr4_p012(unsigned int addr);
void ddr4_mr_write(unsigned int mr, unsigned int data, unsigned int read, unsigned int rank);
void ddr4_phyinit_train_sw_ffc(unsigned int Train2D);

#endif