xref: /openbmc/u-boot/drivers/reset/reset-uniphier.c (revision 1d21e1b97c39d7a6e40a22d3a4153231cf4296af)
14fb96c48SMasahiro Yamada /*
24fb96c48SMasahiro Yamada  * Copyright (C) 2016 Socionext Inc.
34fb96c48SMasahiro Yamada  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
44fb96c48SMasahiro Yamada  *
54fb96c48SMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
64fb96c48SMasahiro Yamada  */
74fb96c48SMasahiro Yamada 
84fb96c48SMasahiro Yamada #include <common.h>
99d922450SSimon Glass #include <dm.h>
104fb96c48SMasahiro Yamada #include <reset-uclass.h>
114fb96c48SMasahiro Yamada #include <linux/bitops.h>
124fb96c48SMasahiro Yamada #include <linux/io.h>
134fb96c48SMasahiro Yamada #include <linux/sizes.h>
144fb96c48SMasahiro Yamada 
154fb96c48SMasahiro Yamada struct uniphier_reset_data {
164fb96c48SMasahiro Yamada 	unsigned int id;
174fb96c48SMasahiro Yamada 	unsigned int reg;
184fb96c48SMasahiro Yamada 	unsigned int bit;
194fb96c48SMasahiro Yamada 	unsigned int flags;
204fb96c48SMasahiro Yamada #define UNIPHIER_RESET_ACTIVE_LOW		BIT(0)
214fb96c48SMasahiro Yamada };
224fb96c48SMasahiro Yamada 
234fb96c48SMasahiro Yamada #define UNIPHIER_RESET_ID_END		(unsigned int)(-1)
244fb96c48SMasahiro Yamada 
254fb96c48SMasahiro Yamada #define UNIPHIER_RESET_END				\
264fb96c48SMasahiro Yamada 	{ .id = UNIPHIER_RESET_ID_END }
274fb96c48SMasahiro Yamada 
284fb96c48SMasahiro Yamada #define UNIPHIER_RESET(_id, _reg, _bit)			\
294fb96c48SMasahiro Yamada 	{						\
304fb96c48SMasahiro Yamada 		.id = (_id),				\
314fb96c48SMasahiro Yamada 		.reg = (_reg),				\
324fb96c48SMasahiro Yamada 		.bit = (_bit),				\
334fb96c48SMasahiro Yamada 	}
344fb96c48SMasahiro Yamada 
354fb96c48SMasahiro Yamada #define UNIPHIER_RESETX(_id, _reg, _bit)		\
364fb96c48SMasahiro Yamada 	{						\
374fb96c48SMasahiro Yamada 		.id = (_id),				\
384fb96c48SMasahiro Yamada 		.reg = (_reg),				\
394fb96c48SMasahiro Yamada 		.bit = (_bit),				\
404fb96c48SMasahiro Yamada 		.flags = UNIPHIER_RESET_ACTIVE_LOW,	\
414fb96c48SMasahiro Yamada 	}
424fb96c48SMasahiro Yamada 
434fb96c48SMasahiro Yamada /* System reset data */
444fb96c48SMasahiro Yamada #define UNIPHIER_SLD3_SYS_RESET_STDMAC(id)		\
454fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x2000, 10)
464fb96c48SMasahiro Yamada 
474fb96c48SMasahiro Yamada #define UNIPHIER_LD11_SYS_RESET_STDMAC(id)		\
484fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x200c, 8)
494fb96c48SMasahiro Yamada 
504fb96c48SMasahiro Yamada #define UNIPHIER_PRO4_SYS_RESET_GIO(id)			\
514fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x2000, 6)
524fb96c48SMasahiro Yamada 
534fb96c48SMasahiro Yamada #define UNIPHIER_LD20_SYS_RESET_GIO(id)			\
544fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x200c, 5)
554fb96c48SMasahiro Yamada 
564fb96c48SMasahiro Yamada #define UNIPHIER_PRO4_SYS_RESET_USB3(id, ch)		\
574fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x2000 + 0x4 * (ch), 17)
584fb96c48SMasahiro Yamada 
59*1d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_sld3_sys_reset_data[] = {
604fb96c48SMasahiro Yamada 	UNIPHIER_SLD3_SYS_RESET_STDMAC(8),	/* Ether, HSC, MIO */
614fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
624fb96c48SMasahiro Yamada };
634fb96c48SMasahiro Yamada 
64*1d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_pro4_sys_reset_data[] = {
654fb96c48SMasahiro Yamada 	UNIPHIER_SLD3_SYS_RESET_STDMAC(8),	/* HSC, MIO, RLE */
664fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_GIO(12),	/* Ether, SATA, USB3 */
674fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(14, 0),
684fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(15, 1),
694fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
704fb96c48SMasahiro Yamada };
714fb96c48SMasahiro Yamada 
72*1d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_pro5_sys_reset_data[] = {
734fb96c48SMasahiro Yamada 	UNIPHIER_SLD3_SYS_RESET_STDMAC(8),	/* HSC */
744fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_GIO(12),	/* PCIe, USB3 */
754fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(14, 0),
764fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(15, 1),
774fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
784fb96c48SMasahiro Yamada };
794fb96c48SMasahiro Yamada 
80*1d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_pxs2_sys_reset_data[] = {
814fb96c48SMasahiro Yamada 	UNIPHIER_SLD3_SYS_RESET_STDMAC(8),	/* HSC, RLE */
824fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(14, 0),
834fb96c48SMasahiro Yamada 	UNIPHIER_PRO4_SYS_RESET_USB3(15, 1),
844fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(16, 0x2014, 4),		/* USB30-PHY0 */
854fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(17, 0x2014, 0),		/* USB30-PHY1 */
864fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(18, 0x2014, 2),		/* USB30-PHY2 */
874fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(20, 0x2014, 5),		/* USB31-PHY0 */
884fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(21, 0x2014, 1),		/* USB31-PHY1 */
894fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(28, 0x2014, 12),	/* SATA */
904fb96c48SMasahiro Yamada 	UNIPHIER_RESET(29, 0x2014, 8),		/* SATA-PHY (active high) */
914fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
924fb96c48SMasahiro Yamada };
934fb96c48SMasahiro Yamada 
94*1d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_ld11_sys_reset_data[] = {
954fb96c48SMasahiro Yamada 	UNIPHIER_LD11_SYS_RESET_STDMAC(8),	/* HSC, MIO */
964fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
974fb96c48SMasahiro Yamada };
984fb96c48SMasahiro Yamada 
99*1d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_ld20_sys_reset_data[] = {
1004fb96c48SMasahiro Yamada 	UNIPHIER_LD11_SYS_RESET_STDMAC(8),	/* HSC */
1014fb96c48SMasahiro Yamada 	UNIPHIER_LD20_SYS_RESET_GIO(12),	/* PCIe, USB3 */
1024fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(16, 0x200c, 12),	/* USB30-PHY0 */
1034fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(17, 0x200c, 13),	/* USB30-PHY1 */
1044fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(18, 0x200c, 14),	/* USB30-PHY2 */
1054fb96c48SMasahiro Yamada 	UNIPHIER_RESETX(19, 0x200c, 15),	/* USB30-PHY3 */
1064fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
1074fb96c48SMasahiro Yamada };
1084fb96c48SMasahiro Yamada 
1094fb96c48SMasahiro Yamada /* Media I/O reset data */
1104fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_SD(id, ch)			\
1114fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x110 + 0x200 * (ch), 0)
1124fb96c48SMasahiro Yamada 
1134fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_SD_BRIDGE(id, ch)		\
1144fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x110 + 0x200 * (ch), 26)
1154fb96c48SMasahiro Yamada 
1164fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_EMMC_HW_RESET(id, ch)	\
1174fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x80 + 0x200 * (ch), 0)
1184fb96c48SMasahiro Yamada 
1194fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_USB2(id, ch)			\
1204fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x114 + 0x200 * (ch), 0)
1214fb96c48SMasahiro Yamada 
1224fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_USB2_BRIDGE(id, ch)		\
1234fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x110 + 0x200 * (ch), 24)
1244fb96c48SMasahiro Yamada 
1254fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_DMAC(id)			\
1264fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x110, 17)
1274fb96c48SMasahiro Yamada 
128*1d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_mio_reset_data[] = {
1294fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD(0, 0),
1304fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD(1, 1),
1314fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD(2, 2),
1324fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD_BRIDGE(3, 0),
1334fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD_BRIDGE(4, 1),
1344fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_SD_BRIDGE(5, 2),
1354fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_EMMC_HW_RESET(6, 1),
1364fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_DMAC(7),
1374fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2(8, 0),
1384fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2(9, 1),
1394fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2(10, 2),
1404fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2(11, 3),
1414fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2_BRIDGE(12, 0),
1424fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2_BRIDGE(13, 1),
1434fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2_BRIDGE(14, 2),
1444fb96c48SMasahiro Yamada 	UNIPHIER_MIO_RESET_USB2_BRIDGE(15, 3),
1454fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
1464fb96c48SMasahiro Yamada };
1474fb96c48SMasahiro Yamada 
1484fb96c48SMasahiro Yamada /* Peripheral reset data */
1494fb96c48SMasahiro Yamada #define UNIPHIER_PERI_RESET_UART(id, ch)		\
1504fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x114, 19 + (ch))
1514fb96c48SMasahiro Yamada 
1524fb96c48SMasahiro Yamada #define UNIPHIER_PERI_RESET_I2C(id, ch)			\
1534fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x114, 5 + (ch))
1544fb96c48SMasahiro Yamada 
1554fb96c48SMasahiro Yamada #define UNIPHIER_PERI_RESET_FI2C(id, ch)		\
1564fb96c48SMasahiro Yamada 	UNIPHIER_RESETX((id), 0x114, 24 + (ch))
1574fb96c48SMasahiro Yamada 
158*1d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_ld4_peri_reset_data[] = {
1594fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(0, 0),
1604fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(1, 1),
1614fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(2, 2),
1624fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(3, 3),
1634fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_I2C(4, 0),
1644fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_I2C(5, 1),
1654fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_I2C(6, 2),
1664fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_I2C(7, 3),
1674fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_I2C(8, 4),
1684fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
1694fb96c48SMasahiro Yamada };
1704fb96c48SMasahiro Yamada 
171*1d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_pro4_peri_reset_data[] = {
1724fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(0, 0),
1734fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(1, 1),
1744fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(2, 2),
1754fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_UART(3, 3),
1764fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(4, 0),
1774fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(5, 1),
1784fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(6, 2),
1794fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(7, 3),
1804fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(8, 4),
1814fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(9, 5),
1824fb96c48SMasahiro Yamada 	UNIPHIER_PERI_RESET_FI2C(10, 6),
1834fb96c48SMasahiro Yamada 	UNIPHIER_RESET_END,
1844fb96c48SMasahiro Yamada };
1854fb96c48SMasahiro Yamada 
1864fb96c48SMasahiro Yamada /* core implementaton */
1874fb96c48SMasahiro Yamada struct uniphier_reset_priv {
1884fb96c48SMasahiro Yamada 	void __iomem *base;
1894fb96c48SMasahiro Yamada 	const struct uniphier_reset_data *data;
1904fb96c48SMasahiro Yamada };
1914fb96c48SMasahiro Yamada 
1924fb96c48SMasahiro Yamada static int uniphier_reset_request(struct reset_ctl *reset_ctl)
1934fb96c48SMasahiro Yamada {
1944fb96c48SMasahiro Yamada 	return 0;
1954fb96c48SMasahiro Yamada }
1964fb96c48SMasahiro Yamada 
1974fb96c48SMasahiro Yamada static int uniphier_reset_free(struct reset_ctl *reset_ctl)
1984fb96c48SMasahiro Yamada {
1994fb96c48SMasahiro Yamada 	return 0;
2004fb96c48SMasahiro Yamada }
2014fb96c48SMasahiro Yamada 
2024fb96c48SMasahiro Yamada static int uniphier_reset_update(struct reset_ctl *reset_ctl, int assert)
2034fb96c48SMasahiro Yamada {
2044fb96c48SMasahiro Yamada 	struct uniphier_reset_priv *priv = dev_get_priv(reset_ctl->dev);
2054fb96c48SMasahiro Yamada 	unsigned long id = reset_ctl->id;
2064fb96c48SMasahiro Yamada 	const struct uniphier_reset_data *p;
2074fb96c48SMasahiro Yamada 
2084fb96c48SMasahiro Yamada 	for (p = priv->data; p->id != UNIPHIER_RESET_ID_END; p++) {
2094fb96c48SMasahiro Yamada 		u32 mask, val;
2104fb96c48SMasahiro Yamada 
2114fb96c48SMasahiro Yamada 		if (p->id != id)
2124fb96c48SMasahiro Yamada 			continue;
2134fb96c48SMasahiro Yamada 
2144fb96c48SMasahiro Yamada 		val = readl(priv->base + p->reg);
2154fb96c48SMasahiro Yamada 
2164fb96c48SMasahiro Yamada 		if (p->flags & UNIPHIER_RESET_ACTIVE_LOW)
2174fb96c48SMasahiro Yamada 			assert = !assert;
2184fb96c48SMasahiro Yamada 
2194fb96c48SMasahiro Yamada 		mask = BIT(p->bit);
2204fb96c48SMasahiro Yamada 
2214fb96c48SMasahiro Yamada 		if (assert)
2224fb96c48SMasahiro Yamada 			val |= mask;
2234fb96c48SMasahiro Yamada 		else
2244fb96c48SMasahiro Yamada 			val &= ~mask;
2254fb96c48SMasahiro Yamada 
2264fb96c48SMasahiro Yamada 		writel(val, priv->base + p->reg);
2274fb96c48SMasahiro Yamada 
2284fb96c48SMasahiro Yamada 		return 0;
2294fb96c48SMasahiro Yamada 	}
2304fb96c48SMasahiro Yamada 
2314fb96c48SMasahiro Yamada 	dev_err(priv->dev, "reset_id=%lu was not handled\n", id);
2324fb96c48SMasahiro Yamada 	return -EINVAL;
2334fb96c48SMasahiro Yamada }
2344fb96c48SMasahiro Yamada 
2354fb96c48SMasahiro Yamada static int uniphier_reset_assert(struct reset_ctl *reset_ctl)
2364fb96c48SMasahiro Yamada {
2374fb96c48SMasahiro Yamada 	return uniphier_reset_update(reset_ctl, 1);
2384fb96c48SMasahiro Yamada }
2394fb96c48SMasahiro Yamada 
2404fb96c48SMasahiro Yamada static int uniphier_reset_deassert(struct reset_ctl *reset_ctl)
2414fb96c48SMasahiro Yamada {
2424fb96c48SMasahiro Yamada 	return uniphier_reset_update(reset_ctl, 0);
2434fb96c48SMasahiro Yamada }
2444fb96c48SMasahiro Yamada 
2454fb96c48SMasahiro Yamada static const struct reset_ops uniphier_reset_ops = {
2464fb96c48SMasahiro Yamada 	.request = uniphier_reset_request,
2474fb96c48SMasahiro Yamada 	.free = uniphier_reset_free,
2484fb96c48SMasahiro Yamada 	.rst_assert = uniphier_reset_assert,
2494fb96c48SMasahiro Yamada 	.rst_deassert = uniphier_reset_deassert,
2504fb96c48SMasahiro Yamada };
2514fb96c48SMasahiro Yamada 
2524fb96c48SMasahiro Yamada static int uniphier_reset_probe(struct udevice *dev)
2534fb96c48SMasahiro Yamada {
2544fb96c48SMasahiro Yamada 	struct uniphier_reset_priv *priv = dev_get_priv(dev);
2554fb96c48SMasahiro Yamada 	fdt_addr_t addr;
2564fb96c48SMasahiro Yamada 
257a821c4afSSimon Glass 	addr = devfdt_get_addr(dev->parent);
2584fb96c48SMasahiro Yamada 	if (addr == FDT_ADDR_T_NONE)
2594fb96c48SMasahiro Yamada 		return -EINVAL;
2604fb96c48SMasahiro Yamada 
2614fb96c48SMasahiro Yamada 	priv->base = devm_ioremap(dev, addr, SZ_4K);
2624fb96c48SMasahiro Yamada 	if (!priv->base)
2634fb96c48SMasahiro Yamada 		return -ENOMEM;
2644fb96c48SMasahiro Yamada 
2654fb96c48SMasahiro Yamada 	priv->data = (void *)dev_get_driver_data(dev);
2664fb96c48SMasahiro Yamada 
2674fb96c48SMasahiro Yamada 	return 0;
2684fb96c48SMasahiro Yamada }
2694fb96c48SMasahiro Yamada 
2704fb96c48SMasahiro Yamada static const struct udevice_id uniphier_reset_match[] = {
2714fb96c48SMasahiro Yamada 	/* System reset */
2724fb96c48SMasahiro Yamada 	{
2734fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-sld3-reset",
2744fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_sld3_sys_reset_data,
2754fb96c48SMasahiro Yamada 	},
2764fb96c48SMasahiro Yamada 	{
2774fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld4-reset",
2784fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_sld3_sys_reset_data,
2794fb96c48SMasahiro Yamada 	},
2804fb96c48SMasahiro Yamada 	{
2814fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro4-reset",
2824fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_sys_reset_data,
2834fb96c48SMasahiro Yamada 	},
2844fb96c48SMasahiro Yamada 	{
2854fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-sld8-reset",
2864fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_sld3_sys_reset_data,
2874fb96c48SMasahiro Yamada 	},
2884fb96c48SMasahiro Yamada 	{
2894fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro5-reset",
2904fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro5_sys_reset_data,
2914fb96c48SMasahiro Yamada 	},
2924fb96c48SMasahiro Yamada 	{
2934fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pxs2-reset",
2944fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pxs2_sys_reset_data,
2954fb96c48SMasahiro Yamada 	},
2964fb96c48SMasahiro Yamada 	{
2974fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld11-reset",
2984fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_ld11_sys_reset_data,
2994fb96c48SMasahiro Yamada 	},
3004fb96c48SMasahiro Yamada 	{
3014fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld20-reset",
3024fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_ld20_sys_reset_data,
3034fb96c48SMasahiro Yamada 	},
3044fb96c48SMasahiro Yamada 	/* Media I/O reset */
3054fb96c48SMasahiro Yamada 	{
3064fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-sld3-mio-clock",
3074fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
3084fb96c48SMasahiro Yamada 	},
3094fb96c48SMasahiro Yamada 	{
3104fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld4-mio-reset",
3114fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
3124fb96c48SMasahiro Yamada 	},
3134fb96c48SMasahiro Yamada 	{
3144fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro4-mio-reset",
3154fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
3164fb96c48SMasahiro Yamada 	},
3174fb96c48SMasahiro Yamada 	{
3184fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-sld8-mio-reset",
3194fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
3204fb96c48SMasahiro Yamada 	},
3214fb96c48SMasahiro Yamada 	{
3224fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro5-mio-reset",
3234fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
3244fb96c48SMasahiro Yamada 	},
3254fb96c48SMasahiro Yamada 	{
3264fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pxs2-mio-reset",
3274fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
3284fb96c48SMasahiro Yamada 	},
3294fb96c48SMasahiro Yamada 	{
3304fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld11-mio-reset",
3314fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
3324fb96c48SMasahiro Yamada 	},
3334fb96c48SMasahiro Yamada 	{
3344fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld20-mio-reset",
3354fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_mio_reset_data,
3364fb96c48SMasahiro Yamada 	},
3374fb96c48SMasahiro Yamada 	/* Peripheral reset */
3384fb96c48SMasahiro Yamada 	{
3394fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld4-peri-reset",
3404fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_ld4_peri_reset_data,
3414fb96c48SMasahiro Yamada 	},
3424fb96c48SMasahiro Yamada 	{
3434fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro4-peri-reset",
3444fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_peri_reset_data,
3454fb96c48SMasahiro Yamada 	},
3464fb96c48SMasahiro Yamada 	{
3474fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-sld8-peri-reset",
3484fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_ld4_peri_reset_data,
3494fb96c48SMasahiro Yamada 	},
3504fb96c48SMasahiro Yamada 	{
3514fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pro5-peri-reset",
3524fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_peri_reset_data,
3534fb96c48SMasahiro Yamada 	},
3544fb96c48SMasahiro Yamada 	{
3554fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-pxs2-peri-reset",
3564fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_peri_reset_data,
3574fb96c48SMasahiro Yamada 	},
3584fb96c48SMasahiro Yamada 	{
3594fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld11-peri-reset",
3604fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_peri_reset_data,
3614fb96c48SMasahiro Yamada 	},
3624fb96c48SMasahiro Yamada 	{
3634fb96c48SMasahiro Yamada 		.compatible = "socionext,uniphier-ld20-peri-reset",
3644fb96c48SMasahiro Yamada 		.data = (ulong)uniphier_pro4_peri_reset_data,
3654fb96c48SMasahiro Yamada 	},
3664fb96c48SMasahiro Yamada 	{ /* sentinel */ }
3674fb96c48SMasahiro Yamada };
3684fb96c48SMasahiro Yamada 
3694fb96c48SMasahiro Yamada U_BOOT_DRIVER(uniphier_reset) = {
3704fb96c48SMasahiro Yamada 	.name = "uniphier-reset",
3714fb96c48SMasahiro Yamada 	.id = UCLASS_RESET,
3724fb96c48SMasahiro Yamada 	.of_match = uniphier_reset_match,
3734fb96c48SMasahiro Yamada 	.probe = uniphier_reset_probe,
3744fb96c48SMasahiro Yamada 	.priv_auto_alloc_size = sizeof(struct uniphier_reset_priv),
3754fb96c48SMasahiro Yamada 	.ops = &uniphier_reset_ops,
3764fb96c48SMasahiro Yamada };
377