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