summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-uniphier/dram/umc-regs.h
blob: a6957a4a51ca51f4ebcff5a2a0ccafb1fab71907 (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
/*
 * UniPhier UMC (Universal Memory Controller) registers
 *
 * Copyright (C) 2011-2014 Panasonic Corporation
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

#ifndef ARCH_UMC_REGS_H
#define ARCH_UMC_REGS_H

#define UMC_BASE		0x5b800000

/* SSIF registers */
#define UMC_SSIF_BASE		UMC_BASE

#define UMC_CPURST		0x00000700
#define UMC_IDSRST		0x0000070C
#define UMC_IXMRST		0x00000714
#define UMC_HDMRST		0x00000718
#define UMC_MDMRST		0x0000071C
#define UMC_HDDRST		0x00000720
#define UMC_MDDRST		0x00000724
#define UMC_SIORST		0x00000728
#define UMC_GIORST		0x0000072C
#define UMC_HD2RST		0x00000734
#define UMC_VIORST		0x0000073C
#define UMC_FRCRST		0x00000748 /* LD4/sLD8 */
#define UMC_DVCRST		0x00000748 /* Pro4 */
#define UMC_RGLRST		0x00000750
#define UMC_VPERST		0x00000758
#define UMC_AIORST		0x00000764
#define UMC_DMDRST		0x00000770

#define UMC_HDMCHSEL		0x00000898
#define UMC_MDMCHSEL		0x0000089C
#define UMC_DVCCHSEL		0x000008C8
#define UMC_DMDCHSEL		0x000008F0

#define UMC_CLKEN_SSIF_FETCH	0x0000C060
#define UMC_CLKEN_SSIF_COMQUE0	0x0000C064
#define UMC_CLKEN_SSIF_COMWC0	0x0000C068
#define UMC_CLKEN_SSIF_COMRC0	0x0000C06C
#define UMC_CLKEN_SSIF_COMQUE1	0x0000C070
#define UMC_CLKEN_SSIF_COMWC1	0x0000C074
#define UMC_CLKEN_SSIF_COMRC1	0x0000C078
#define UMC_CLKEN_SSIF_WC	0x0000C07C
#define UMC_CLKEN_SSIF_RC	0x0000C080
#define UMC_CLKEN_SSIF_DST	0x0000C084

/* CA registers */
#define UMC_CA_BASE(ch)		(UMC_BASE + 0x00001000 + 0x00001000 * (ch))

/* DRAM controller registers */
#define UMC_DRAMCONT_BASE(ch)	(UMC_BASE + 0x00400000 + 0x00200000 * (ch))

#define UMC_CMDCTLA		0x00000000
#define UMC_CMDCTLB		0x00000004
#define UMC_INITCTLA		0x00000008
#define UMC_INITCTLB		0x0000000C
#define UMC_INITCTLC		0x00000010
#define UMC_INITSET		0x00000014
#define UMC_INITSTAT		0x00000018
#define UMC_DRMMR0		0x0000001C
#define UMC_DRMMR1		0x00000020
#define UMC_DRMMR2		0x00000024
#define UMC_DRMMR3		0x00000028
#define UMC_SPCCTLA		0x00000030
#define UMC_SPCCTLB		0x00000034
#define UMC_SPCSETA		0x00000038
#define UMC_SPCSETB		0x0000003C
#define   UMC_SPCSETB_AREFMD_MASK	(0x3)	/* Auto Refresh Mode */
#define   UMC_SPCSETB_AREFMD_ARB	(0x0)	/* control by arbitor */
#define   UMC_SPCSETB_AREFMD_CONT	(0x1)	/* control by DRAMCONT */
#define   UMC_SPCSETB_AREFMD_REG	(0x2)	/* control by register */
#define UMC_SPCSETC		0x00000040
#define UMC_SPCSETD		0x00000044
#define UMC_SPCSTATA		0x00000050
#define UMC_SPCSTATB		0x00000054
#define UMC_SPCSTATC		0x00000058
#define UMC_ACSSETA		0x00000060
#define UMC_FLOWCTLA		0x00000400
#define UMC_FLOWCTLB		0x00000404
#define UMC_FLOWCTLC		0x00000408
#define UMC_FLOWCTLG		0x00000508
#define UMC_FLOWCTLOB0		0x00000520
#define UMC_FLOWCTLOB1		0x00000524
#define UMC_RDATACTL_D0		0x00000600
#define   UMC_RDATACTL_RADLTY_SHIFT	4
#define   UMC_RDATACTL_RADLTY_MASK	(0xf << (UMC_RDATACTL_RADLTY_SHIFT))
#define   UMC_RDATACTL_RAD2LTY_SHIFT	8
#define   UMC_RDATACTL_RAD2LTY_MASK	(0xf << (UMC_RDATACTL_RAD2LTY_SHIFT))
#define UMC_WDATACTL_D0		0x00000604
#define UMC_RDATACTL_D1		0x00000608
#define UMC_WDATACTL_D1		0x0000060C
#define UMC_DATASET		0x00000610
#define UMC_RESPCTL		0x00000624
#define UMC_DCCGCTL		0x00000720
#define UMC_DICGCTLA		0x00000724
#define UMC_DICGCTLB		0x00000728
#define UMC_ERRMASKA		0x00000958
#define UMC_ERRMASKB		0x0000095c
#define UMC_BSICMAPSET		0x00000988
#define UMC_DIOCTLA		0x00000C00
#define   UMC_DIOCTLA_CTL_NRST		BIT(8)	/* ctl_rst_n */
#define   UMC_DIOCTLA_CFG_NRST		BIT(0)	/* cfg_rst_n */
#define UMC_DFICUPDCTLA		0x00000C20

/* UM registers */
#define UMC_MBUS0		0x00080004
#define UMC_MBUS1		0x00081004
#define UMC_MBUS2		0x00082004
#define UMC_MBUS3		0x00083004

/* UD registers */
#define UMC_BITPERPIXELMODE_D0	0x010
#define UMC_PAIR1DOFF_D0	0x054

#ifndef __ASSEMBLY__

#include <linux/types.h>

static inline void umc_polling(u32 address, u32 expval, u32 mask)
{
	u32 nmask = ~mask;
	u32 data;
	do {
		data = readl(address) & nmask;
	} while (data != expval);
}

static inline void umc_dram_init_start(void __iomem *dramcont)
{
	writel(0x00000002, dramcont + UMC_INITSET);
}

static inline void umc_dram_init_poll(void __iomem *dramcont)
{
	while ((readl(dramcont + UMC_INITSTAT) & 0x00000002))
		;
}

#endif

#endif
OpenPOWER on IntegriCloud