xref: /rk3399_rockchip-uboot/drivers/reset/reset-uniphier.c (revision 4fb96c48c183128c00b21c7858bb05897a1b80de)
1*4fb96c48SMasahiro Yamada /*
2*4fb96c48SMasahiro Yamada  * Copyright (C) 2016 Socionext Inc.
3*4fb96c48SMasahiro Yamada  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
4*4fb96c48SMasahiro Yamada  *
5*4fb96c48SMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
6*4fb96c48SMasahiro Yamada  */
7*4fb96c48SMasahiro Yamada 
8*4fb96c48SMasahiro Yamada #include <common.h>
9*4fb96c48SMasahiro Yamada #include <reset-uclass.h>
10*4fb96c48SMasahiro Yamada #include <dm/device.h>
11*4fb96c48SMasahiro Yamada #include <linux/bitops.h>
12*4fb96c48SMasahiro Yamada #include <linux/io.h>
13*4fb96c48SMasahiro Yamada #include <linux/sizes.h>
14*4fb96c48SMasahiro Yamada 
15*4fb96c48SMasahiro Yamada struct uniphier_reset_data {
16*4fb96c48SMasahiro Yamada 	unsigned int id;
17*4fb96c48SMasahiro Yamada 	unsigned int reg;
18*4fb96c48SMasahiro Yamada 	unsigned int bit;
19*4fb96c48SMasahiro Yamada 	unsigned int flags;
20*4fb96c48SMasahiro Yamada #define UNIPHIER_RESET_ACTIVE_LOW		BIT(0)
21*4fb96c48SMasahiro Yamada };
22*4fb96c48SMasahiro Yamada 
23*4fb96c48SMasahiro Yamada #define UNIPHIER_RESET_ID_END		(unsigned int)(-1)
24*4fb96c48SMasahiro Yamada 
25*4fb96c48SMasahiro Yamada #define UNIPHIER_RESET_END				\
26*4fb96c48SMasahiro Yamada 	{ .id = UNIPHIER_RESET_ID_END }
27*4fb96c48SMasahiro Yamada 
28*4fb96c48SMasahiro Yamada #define UNIPHIER_RESET(_id, _reg, _bit)			\
29*4fb96c48SMasahiro Yamada 	{						\
30*4fb96c48SMasahiro Yamada 		.id = (_id),				\
31*4fb96c48SMasahiro Yamada 		.reg = (_reg),				\
32*4fb96c48SMasahiro Yamada 		.bit = (_bit),				\
33*4fb96c48SMasahiro Yamada 	}
34*4fb96c48SMasahiro Yamada 
35*4fb96c48SMasahiro Yamada #define UNIPHIER_RESETX(_id, _reg, _bit)		\
36*4fb96c48SMasahiro Yamada 	{						\
37*4fb96c48SMasahiro Yamada 		.id = (_id),				\
38*4fb96c48SMasahiro Yamada 		.reg = (_reg),				\
39*4fb96c48SMasahiro Yamada 		.bit = (_bit),				\
40*4fb96c48SMasahiro Yamada 		.flags = UNIPHIER_RESET_ACTIVE_LOW,	\
41*4fb96c48SMasahiro Yamada 	}
42*4fb96c48SMasahiro Yamada 
43*4fb96c48SMasahiro Yamada /* System reset data */
44*4fb96c48SMasahiro Yamada #define UNIPHIER_SLD3_SYS_RESET_STDMAC(id)		\
45*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x2000, 10)
46*4fb96c48SMasahiro Yamada 
47*4fb96c48SMasahiro Yamada #define UNIPHIER_LD11_SYS_RESET_STDMAC(id)		\
48*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x200c, 8)
49*4fb96c48SMasahiro Yamada 
50*4fb96c48SMasahiro Yamada #define UNIPHIER_PRO4_SYS_RESET_GIO(id)			\
51*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x2000, 6)
52*4fb96c48SMasahiro Yamada 
53*4fb96c48SMasahiro Yamada #define UNIPHIER_LD20_SYS_RESET_GIO(id)			\
54*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x200c, 5)
55*4fb96c48SMasahiro Yamada 
56*4fb96c48SMasahiro Yamada #define UNIPHIER_PRO4_SYS_RESET_USB3(id, ch)		\
57*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x2000 + 0x4 * (ch), 17)
58*4fb96c48SMasahiro Yamada 
59*4fb96c48SMasahiro Yamada const struct uniphier_reset_data uniphier_sld3_sys_reset_data[] = {
60*4fb96c48SMasahiro Yamada 	UNIPHIER_SLD3_SYS_RESET_STDMAC(8),	/* Ether, HSC, MIO */
61*4fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
62*4fb96c48SMasahiro Yamada };
63*4fb96c48SMasahiro Yamada 
64*4fb96c48SMasahiro Yamada const struct uniphier_reset_data uniphier_pro4_sys_reset_data[] = {
65*4fb96c48SMasahiro Yamada 	UNIPHIER_SLD3_SYS_RESET_STDMAC(8),	/* HSC, MIO, RLE */
66*4fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_GIO(12),	/* Ether, SATA, USB3 */
67*4fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(14, 0),
68*4fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(15, 1),
69*4fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
70*4fb96c48SMasahiro Yamada };
71*4fb96c48SMasahiro Yamada 
72*4fb96c48SMasahiro Yamada const struct uniphier_reset_data uniphier_pro5_sys_reset_data[] = {
73*4fb96c48SMasahiro Yamada 	UNIPHIER_SLD3_SYS_RESET_STDMAC(8),	/* HSC */
74*4fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_GIO(12),	/* PCIe, USB3 */
75*4fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(14, 0),
76*4fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(15, 1),
77*4fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
78*4fb96c48SMasahiro Yamada };
79*4fb96c48SMasahiro Yamada 
80*4fb96c48SMasahiro Yamada const struct uniphier_reset_data uniphier_pxs2_sys_reset_data[] = {
81*4fb96c48SMasahiro Yamada 	UNIPHIER_SLD3_SYS_RESET_STDMAC(8),	/* HSC, RLE */
82*4fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(14, 0),
83*4fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(15, 1),
84*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(16, 0x2014, 4),		/* USB30-PHY0 */
85*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(17, 0x2014, 0),		/* USB30-PHY1 */
86*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(18, 0x2014, 2),		/* USB30-PHY2 */
87*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(20, 0x2014, 5),		/* USB31-PHY0 */
88*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(21, 0x2014, 1),		/* USB31-PHY1 */
89*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(28, 0x2014, 12),	/* SATA */
90*4fb96c48SMasahiro Yamada 	UNIPHIER_RESET(29, 0x2014, 8),		/* SATA-PHY (active high) */
91*4fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
92*4fb96c48SMasahiro Yamada };
93*4fb96c48SMasahiro Yamada 
94*4fb96c48SMasahiro Yamada const struct uniphier_reset_data uniphier_ld11_sys_reset_data[] = {
95*4fb96c48SMasahiro Yamada 	UNIPHIER_LD11_SYS_RESET_STDMAC(8),	/* HSC, MIO */
96*4fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
97*4fb96c48SMasahiro Yamada };
98*4fb96c48SMasahiro Yamada 
99*4fb96c48SMasahiro Yamada const struct uniphier_reset_data uniphier_ld20_sys_reset_data[] = {
100*4fb96c48SMasahiro Yamada 	UNIPHIER_LD11_SYS_RESET_STDMAC(8),	/* HSC */
101*4fb96c48SMasahiro Yamada 	UNIPHIER_LD20_SYS_RESET_GIO(12),	/* PCIe, USB3 */
102*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(16, 0x200c, 12),	/* USB30-PHY0 */
103*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(17, 0x200c, 13),	/* USB30-PHY1 */
104*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(18, 0x200c, 14),	/* USB30-PHY2 */
105*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(19, 0x200c, 15),	/* USB30-PHY3 */
106*4fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
107*4fb96c48SMasahiro Yamada };
108*4fb96c48SMasahiro Yamada 
109*4fb96c48SMasahiro Yamada /* Media I/O reset data */
110*4fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_SD(id, ch)			\
111*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x110 + 0x200 * (ch), 0)
112*4fb96c48SMasahiro Yamada 
113*4fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_SD_BRIDGE(id, ch)		\
114*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x110 + 0x200 * (ch), 26)
115*4fb96c48SMasahiro Yamada 
116*4fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_EMMC_HW_RESET(id, ch)	\
117*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x80 + 0x200 * (ch), 0)
118*4fb96c48SMasahiro Yamada 
119*4fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_USB2(id, ch)			\
120*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x114 + 0x200 * (ch), 0)
121*4fb96c48SMasahiro Yamada 
122*4fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_USB2_BRIDGE(id, ch)		\
123*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x110 + 0x200 * (ch), 24)
124*4fb96c48SMasahiro Yamada 
125*4fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_DMAC(id)			\
126*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x110, 17)
127*4fb96c48SMasahiro Yamada 
128*4fb96c48SMasahiro Yamada const struct uniphier_reset_data uniphier_mio_reset_data[] = {
129*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD(0, 0),
130*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD(1, 1),
131*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD(2, 2),
132*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD_BRIDGE(3, 0),
133*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD_BRIDGE(4, 1),
134*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD_BRIDGE(5, 2),
135*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_EMMC_HW_RESET(6, 1),
136*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_DMAC(7),
137*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2(8, 0),
138*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2(9, 1),
139*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2(10, 2),
140*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2(11, 3),
141*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2_BRIDGE(12, 0),
142*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2_BRIDGE(13, 1),
143*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2_BRIDGE(14, 2),
144*4fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2_BRIDGE(15, 3),
145*4fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
146*4fb96c48SMasahiro Yamada };
147*4fb96c48SMasahiro Yamada 
148*4fb96c48SMasahiro Yamada /* Peripheral reset data */
149*4fb96c48SMasahiro Yamada #define UNIPHIER_PERI_RESET_UART(id, ch)		\
150*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x114, 19 + (ch))
151*4fb96c48SMasahiro Yamada 
152*4fb96c48SMasahiro Yamada #define UNIPHIER_PERI_RESET_I2C(id, ch)			\
153*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x114, 5 + (ch))
154*4fb96c48SMasahiro Yamada 
155*4fb96c48SMasahiro Yamada #define UNIPHIER_PERI_RESET_FI2C(id, ch)		\
156*4fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x114, 24 + (ch))
157*4fb96c48SMasahiro Yamada 
158*4fb96c48SMasahiro Yamada const struct uniphier_reset_data uniphier_ld4_peri_reset_data[] = {
159*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(0, 0),
160*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(1, 1),
161*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(2, 2),
162*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(3, 3),
163*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_I2C(4, 0),
164*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_I2C(5, 1),
165*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_I2C(6, 2),
166*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_I2C(7, 3),
167*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_I2C(8, 4),
168*4fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
169*4fb96c48SMasahiro Yamada };
170*4fb96c48SMasahiro Yamada 
171*4fb96c48SMasahiro Yamada const struct uniphier_reset_data uniphier_pro4_peri_reset_data[] = {
172*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(0, 0),
173*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(1, 1),
174*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(2, 2),
175*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(3, 3),
176*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(4, 0),
177*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(5, 1),
178*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(6, 2),
179*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(7, 3),
180*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(8, 4),
181*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(9, 5),
182*4fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(10, 6),
183*4fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
184*4fb96c48SMasahiro Yamada };
185*4fb96c48SMasahiro Yamada 
186*4fb96c48SMasahiro Yamada /* core implementaton */
187*4fb96c48SMasahiro Yamada struct uniphier_reset_priv {
188*4fb96c48SMasahiro Yamada 	void __iomem *base;
189*4fb96c48SMasahiro Yamada 	const struct uniphier_reset_data *data;
190*4fb96c48SMasahiro Yamada };
191*4fb96c48SMasahiro Yamada 
192*4fb96c48SMasahiro Yamada static int uniphier_reset_request(struct reset_ctl *reset_ctl)
193*4fb96c48SMasahiro Yamada {
194*4fb96c48SMasahiro Yamada 	return 0;
195*4fb96c48SMasahiro Yamada }
196*4fb96c48SMasahiro Yamada 
197*4fb96c48SMasahiro Yamada static int uniphier_reset_free(struct reset_ctl *reset_ctl)
198*4fb96c48SMasahiro Yamada {
199*4fb96c48SMasahiro Yamada 	return 0;
200*4fb96c48SMasahiro Yamada }
201*4fb96c48SMasahiro Yamada 
202*4fb96c48SMasahiro Yamada static int uniphier_reset_update(struct reset_ctl *reset_ctl, int assert)
203*4fb96c48SMasahiro Yamada {
204*4fb96c48SMasahiro Yamada 	struct uniphier_reset_priv *priv = dev_get_priv(reset_ctl->dev);
205*4fb96c48SMasahiro Yamada 	unsigned long id = reset_ctl->id;
206*4fb96c48SMasahiro Yamada 	const struct uniphier_reset_data *p;
207*4fb96c48SMasahiro Yamada 
208*4fb96c48SMasahiro Yamada 	for (p = priv->data; p->id != UNIPHIER_RESET_ID_END; p++) {
209*4fb96c48SMasahiro Yamada 		u32 mask, val;
210*4fb96c48SMasahiro Yamada 
211*4fb96c48SMasahiro Yamada 		if (p->id != id)
212*4fb96c48SMasahiro Yamada 			continue;
213*4fb96c48SMasahiro Yamada 
214*4fb96c48SMasahiro Yamada 		val = readl(priv->base + p->reg);
215*4fb96c48SMasahiro Yamada 
216*4fb96c48SMasahiro Yamada 		if (p->flags & UNIPHIER_RESET_ACTIVE_LOW)
217*4fb96c48SMasahiro Yamada 			assert = !assert;
218*4fb96c48SMasahiro Yamada 
219*4fb96c48SMasahiro Yamada 		mask = BIT(p->bit);
220*4fb96c48SMasahiro Yamada 
221*4fb96c48SMasahiro Yamada 		if (assert)
222*4fb96c48SMasahiro Yamada 			val |= mask;
223*4fb96c48SMasahiro Yamada 		else
224*4fb96c48SMasahiro Yamada 			val &= ~mask;
225*4fb96c48SMasahiro Yamada 
226*4fb96c48SMasahiro Yamada 		writel(val, priv->base + p->reg);
227*4fb96c48SMasahiro Yamada 
228*4fb96c48SMasahiro Yamada 		return 0;
229*4fb96c48SMasahiro Yamada 	}
230*4fb96c48SMasahiro Yamada 
231*4fb96c48SMasahiro Yamada 	dev_err(priv->dev, "reset_id=%lu was not handled\n", id);
232*4fb96c48SMasahiro Yamada 	return -EINVAL;
233*4fb96c48SMasahiro Yamada }
234*4fb96c48SMasahiro Yamada 
235*4fb96c48SMasahiro Yamada static int uniphier_reset_assert(struct reset_ctl *reset_ctl)
236*4fb96c48SMasahiro Yamada {
237*4fb96c48SMasahiro Yamada 	return uniphier_reset_update(reset_ctl, 1);
238*4fb96c48SMasahiro Yamada }
239*4fb96c48SMasahiro Yamada 
240*4fb96c48SMasahiro Yamada static int uniphier_reset_deassert(struct reset_ctl *reset_ctl)
241*4fb96c48SMasahiro Yamada {
242*4fb96c48SMasahiro Yamada 	return uniphier_reset_update(reset_ctl, 0);
243*4fb96c48SMasahiro Yamada }
244*4fb96c48SMasahiro Yamada 
245*4fb96c48SMasahiro Yamada static const struct reset_ops uniphier_reset_ops = {
246*4fb96c48SMasahiro Yamada 	.request = uniphier_reset_request,
247*4fb96c48SMasahiro Yamada 	.free = uniphier_reset_free,
248*4fb96c48SMasahiro Yamada 	.rst_assert = uniphier_reset_assert,
249*4fb96c48SMasahiro Yamada 	.rst_deassert = uniphier_reset_deassert,
250*4fb96c48SMasahiro Yamada };
251*4fb96c48SMasahiro Yamada 
252*4fb96c48SMasahiro Yamada static int uniphier_reset_probe(struct udevice *dev)
253*4fb96c48SMasahiro Yamada {
254*4fb96c48SMasahiro Yamada 	struct uniphier_reset_priv *priv = dev_get_priv(dev);
255*4fb96c48SMasahiro Yamada 	fdt_addr_t addr;
256*4fb96c48SMasahiro Yamada 
257*4fb96c48SMasahiro Yamada 	addr = dev_get_addr(dev->parent);
258*4fb96c48SMasahiro Yamada 	if (addr == FDT_ADDR_T_NONE)
259*4fb96c48SMasahiro Yamada 		return -EINVAL;
260*4fb96c48SMasahiro Yamada 
261*4fb96c48SMasahiro Yamada 	priv->base = devm_ioremap(dev, addr, SZ_4K);
262*4fb96c48SMasahiro Yamada 	if (!priv->base)
263*4fb96c48SMasahiro Yamada 		return -ENOMEM;
264*4fb96c48SMasahiro Yamada 
265*4fb96c48SMasahiro Yamada 	priv->data = (void *)dev_get_driver_data(dev);
266*4fb96c48SMasahiro Yamada 
267*4fb96c48SMasahiro Yamada 	return 0;
268*4fb96c48SMasahiro Yamada }
269*4fb96c48SMasahiro Yamada 
270*4fb96c48SMasahiro Yamada static const struct udevice_id uniphier_reset_match[] = {
271*4fb96c48SMasahiro Yamada 	/* System reset */
272*4fb96c48SMasahiro Yamada 	{
273*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-sld3-reset",
274*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_sld3_sys_reset_data,
275*4fb96c48SMasahiro Yamada 	},
276*4fb96c48SMasahiro Yamada 	{
277*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld4-reset",
278*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_sld3_sys_reset_data,
279*4fb96c48SMasahiro Yamada 	},
280*4fb96c48SMasahiro Yamada 	{
281*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro4-reset",
282*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_sys_reset_data,
283*4fb96c48SMasahiro Yamada 	},
284*4fb96c48SMasahiro Yamada 	{
285*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-sld8-reset",
286*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_sld3_sys_reset_data,
287*4fb96c48SMasahiro Yamada 	},
288*4fb96c48SMasahiro Yamada 	{
289*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro5-reset",
290*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro5_sys_reset_data,
291*4fb96c48SMasahiro Yamada 	},
292*4fb96c48SMasahiro Yamada 	{
293*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pxs2-reset",
294*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pxs2_sys_reset_data,
295*4fb96c48SMasahiro Yamada 	},
296*4fb96c48SMasahiro Yamada 	{
297*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld11-reset",
298*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_ld11_sys_reset_data,
299*4fb96c48SMasahiro Yamada 	},
300*4fb96c48SMasahiro Yamada 	{
301*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld20-reset",
302*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_ld20_sys_reset_data,
303*4fb96c48SMasahiro Yamada 	},
304*4fb96c48SMasahiro Yamada 	/* Media I/O reset */
305*4fb96c48SMasahiro Yamada 	{
306*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-sld3-mio-clock",
307*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
308*4fb96c48SMasahiro Yamada 	},
309*4fb96c48SMasahiro Yamada 	{
310*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld4-mio-reset",
311*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
312*4fb96c48SMasahiro Yamada 	},
313*4fb96c48SMasahiro Yamada 	{
314*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro4-mio-reset",
315*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
316*4fb96c48SMasahiro Yamada 	},
317*4fb96c48SMasahiro Yamada 	{
318*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-sld8-mio-reset",
319*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
320*4fb96c48SMasahiro Yamada 	},
321*4fb96c48SMasahiro Yamada 	{
322*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro5-mio-reset",
323*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
324*4fb96c48SMasahiro Yamada 	},
325*4fb96c48SMasahiro Yamada 	{
326*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pxs2-mio-reset",
327*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
328*4fb96c48SMasahiro Yamada 	},
329*4fb96c48SMasahiro Yamada 	{
330*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld11-mio-reset",
331*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
332*4fb96c48SMasahiro Yamada 	},
333*4fb96c48SMasahiro Yamada 	{
334*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld20-mio-reset",
335*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
336*4fb96c48SMasahiro Yamada 	},
337*4fb96c48SMasahiro Yamada 	/* Peripheral reset */
338*4fb96c48SMasahiro Yamada 	{
339*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld4-peri-reset",
340*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_ld4_peri_reset_data,
341*4fb96c48SMasahiro Yamada 	},
342*4fb96c48SMasahiro Yamada 	{
343*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro4-peri-reset",
344*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_peri_reset_data,
345*4fb96c48SMasahiro Yamada 	},
346*4fb96c48SMasahiro Yamada 	{
347*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-sld8-peri-reset",
348*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_ld4_peri_reset_data,
349*4fb96c48SMasahiro Yamada 	},
350*4fb96c48SMasahiro Yamada 	{
351*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro5-peri-reset",
352*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_peri_reset_data,
353*4fb96c48SMasahiro Yamada 	},
354*4fb96c48SMasahiro Yamada 	{
355*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pxs2-peri-reset",
356*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_peri_reset_data,
357*4fb96c48SMasahiro Yamada 	},
358*4fb96c48SMasahiro Yamada 	{
359*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld11-peri-reset",
360*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_peri_reset_data,
361*4fb96c48SMasahiro Yamada 	},
362*4fb96c48SMasahiro Yamada 	{
363*4fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld20-peri-reset",
364*4fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_peri_reset_data,
365*4fb96c48SMasahiro Yamada 	},
366*4fb96c48SMasahiro Yamada 	{ /* sentinel */ }
367*4fb96c48SMasahiro Yamada };
368*4fb96c48SMasahiro Yamada 
369*4fb96c48SMasahiro Yamada U_BOOT_DRIVER(uniphier_reset) = {
370*4fb96c48SMasahiro Yamada 	.name = "uniphier-reset",
371*4fb96c48SMasahiro Yamada 	.id = UCLASS_RESET,
372*4fb96c48SMasahiro Yamada 	.of_match = uniphier_reset_match,
373*4fb96c48SMasahiro Yamada 	.probe = uniphier_reset_probe,
374*4fb96c48SMasahiro Yamada 	.priv_auto_alloc_size = sizeof(struct uniphier_reset_priv),
375*4fb96c48SMasahiro Yamada 	.ops = &uniphier_reset_ops,
376*4fb96c48SMasahiro Yamada };
377