summaryrefslogtreecommitdiff
path: root/drivers/ddr/microchip/ddr2_regs.h
blob: 0f4b159048c82e873872d74f579107775707e282 (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
 * (c) 2015 Purna Chandra Mandal <purna.mandal@microchip.com>
 *
 * SPDX-License-Identifier:	GPL-2.0+
 *
 */

#ifndef __MICROCHIP_DDR2_REGS_H
#define __MICROCHIP_DDR2_REGS_H

#include <linux/bitops.h>

/* DDR2 Controller */
struct ddr2_ctrl_regs {
	u32 tsel;
	u32 minlim;
	u32 reqprd;
	u32 mincmd;
	u32 memcon;
	u32 memcfg0;
	u32 memcfg1;
	u32 memcfg2;
	u32 memcfg3;
	u32 memcfg4;
	u32 refcfg;
	u32 pwrcfg;
	u32 dlycfg0;
	u32 dlycfg1;
	u32 dlycfg2;
	u32 dlycfg3;
	u32 odtcfg;
	u32 xfercfg;
	u32 cmdissue;
	u32 odtencfg;
	u32 memwidth;
	u32 unused[11];
	u32 cmd10[16];
	u32 cmd20[16];
};

/* Arbiter Config */
#define MIN_LIM_WIDTH		5
#define RQST_PERIOD_WIDTH	8
#define MIN_CMDACPT_WIDTH	8

/* Refresh Config */
#define REFCNT_CLK(x)		(x)
#define REFDLY_CLK(x)		((x) << 16)
#define MAX_PEND_REF(x)		((x) << 24)

/* Power Config */
#define PRECH_PWR_DN_ONLY(x)	((x) << 22)
#define SELF_REF_DLY(x)		((x) << 12)
#define PWR_DN_DLY(x)		((x) << 4)
#define EN_AUTO_SELF_REF(x)	((x) << 3)
#define EN_AUTO_PWR_DN(x)	((x) << 2)
#define ERR_CORR_EN(x)		((x) << 1)
#define ECC_EN(x)		(x)

/* Memory Width */
#define HALF_RATE_MODE		BIT(3)

/* Delay Config */
#define ODTWLEN(x)	((x) << 20)
#define ODTRLEN(x)	((x) << 16)
#define ODTWDLY(x)	((x) << 12)
#define ODTRDLY(x)	((x) << 8)

/* Xfer Config */
#define BIG_ENDIAN(x)	((x) << 31)
#define MAX_BURST(x)	((x) << 24)
#define RDATENDLY(x)	((x) << 16)
#define NXDATAVDLY(x)	((x) << 4)
#define NXTDATRQDLY(x)	((x) << 0)

/* Host Commands */
#define IDLE_NOP	0x00ffffff
#define PRECH_ALL_CMD	0x00fff401
#define REF_CMD		0x00fff801
#define LOAD_MODE_CMD	0x00fff001
#define CKE_LOW		0x00ffeffe

#define NUM_HOST_CMDS	12

/* Host CMD Issue */
#define CMD_VALID	BIT(4)
#define NUMHOSTCMD(x)	(x)

/* Memory Control */
#define INIT_DONE	BIT(1)
#define INIT_START	BIT(0)

/* Address Control */
#define EN_AUTO_PRECH		0
#define SB_PRI			1

/* DDR2 Phy Register */
struct ddr2_phy_regs {
	u32 scl_start;
	u32 unused1[2];
	u32 scl_latency;
	u32 unused2[2];
	u32 scl_config_1;
	u32 scl_config_2;
	u32 pad_ctrl;
	u32 dll_recalib;
};

/* PHY PAD CONTROL */
#define ODT_SEL			BIT(0)
#define ODT_EN			BIT(1)
#define DRIVE_SEL(x)		((x) << 2)
#define ODT_PULLDOWN(x)		((x) << 4)
#define ODT_PULLUP(x)		((x) << 6)
#define EXTRA_OEN_CLK(x)	((x) << 8)
#define NOEXT_DLL		BIT(9)
#define DLR_DFT_WRCMD		BIT(13)
#define HALF_RATE		BIT(14)
#define DRVSTR_PFET(x)		((x) << 16)
#define DRVSTR_NFET(x)		((x) << 20)
#define RCVR_EN			BIT(28)
#define PREAMBLE_DLY(x)		((x) << 29)

/* PHY DLL RECALIBRATE */
#define RECALIB_CNT(x)		((x) << 8)
#define DISABLE_RECALIB(x)	((x) << 26)
#define DELAY_START_VAL(x)	((x) << 28)

/* PHY SCL CONFIG1 */
#define SCL_BURST8		BIT(0)
#define SCL_DDR_CONNECTED		BIT(1)
#define SCL_RCAS_LAT(x)		((x) << 4)
#define SCL_ODTCSWW		BIT(24)

/* PHY SCL CONFIG2 */
#define SCL_CSEN		BIT(0)
#define SCL_WCAS_LAT(x)		((x) << 8)

/* PHY SCL Latency */
#define SCL_CAPCLKDLY(x)	((x) << 0)
#define SCL_DDRCLKDLY(x)	((x) << 4)

/* PHY SCL START */
#define SCL_START		BIT(28)
#define SCL_EN			BIT(26)
#define SCL_LUBPASS		(BIT(1) | BIT(0))

#endif	/* __MICROCHIP_DDR2_REGS_H */