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> 9*9d922450SSimon 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 594fb96c48SMasahiro Yamada 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 644fb96c48SMasahiro Yamada 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 724fb96c48SMasahiro Yamada 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 804fb96c48SMasahiro Yamada 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 944fb96c48SMasahiro Yamada 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 994fb96c48SMasahiro Yamada 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 1284fb96c48SMasahiro Yamada 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 1584fb96c48SMasahiro Yamada 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 1714fb96c48SMasahiro Yamada 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 2574fb96c48SMasahiro Yamada addr = dev_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