1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 24fb96c48SMasahiro Yamada /* 34fb96c48SMasahiro Yamada * Copyright (C) 2016 Socionext Inc. 44fb96c48SMasahiro Yamada * Author: Masahiro Yamada <yamada.masahiro@socionext.com> 54fb96c48SMasahiro Yamada */ 64fb96c48SMasahiro Yamada 74fb96c48SMasahiro Yamada #include <common.h> 89d922450SSimon Glass #include <dm.h> 94fb96c48SMasahiro Yamada #include <reset-uclass.h> 104fb96c48SMasahiro Yamada #include <linux/bitops.h> 114fb96c48SMasahiro Yamada #include <linux/io.h> 124fb96c48SMasahiro Yamada #include <linux/sizes.h> 134fb96c48SMasahiro Yamada 144fb96c48SMasahiro Yamada struct uniphier_reset_data { 154fb96c48SMasahiro Yamada unsigned int id; 164fb96c48SMasahiro Yamada unsigned int reg; 174fb96c48SMasahiro Yamada unsigned int bit; 184fb96c48SMasahiro Yamada unsigned int flags; 194fb96c48SMasahiro Yamada #define UNIPHIER_RESET_ACTIVE_LOW BIT(0) 204fb96c48SMasahiro Yamada }; 214fb96c48SMasahiro Yamada 224fb96c48SMasahiro Yamada #define UNIPHIER_RESET_ID_END (unsigned int)(-1) 234fb96c48SMasahiro Yamada 244fb96c48SMasahiro Yamada #define UNIPHIER_RESET_END \ 254fb96c48SMasahiro Yamada { .id = UNIPHIER_RESET_ID_END } 264fb96c48SMasahiro Yamada 274fb96c48SMasahiro Yamada #define UNIPHIER_RESET(_id, _reg, _bit) \ 284fb96c48SMasahiro Yamada { \ 294fb96c48SMasahiro Yamada .id = (_id), \ 304fb96c48SMasahiro Yamada .reg = (_reg), \ 314fb96c48SMasahiro Yamada .bit = (_bit), \ 324fb96c48SMasahiro Yamada } 334fb96c48SMasahiro Yamada 344fb96c48SMasahiro Yamada #define UNIPHIER_RESETX(_id, _reg, _bit) \ 354fb96c48SMasahiro Yamada { \ 364fb96c48SMasahiro Yamada .id = (_id), \ 374fb96c48SMasahiro Yamada .reg = (_reg), \ 384fb96c48SMasahiro Yamada .bit = (_bit), \ 394fb96c48SMasahiro Yamada .flags = UNIPHIER_RESET_ACTIVE_LOW, \ 404fb96c48SMasahiro Yamada } 414fb96c48SMasahiro Yamada 424fb96c48SMasahiro Yamada /* System reset data */ 431d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_pro4_sys_reset_data[] = { 446584b1eaSMasahiro Yamada UNIPHIER_RESETX(2, 0x2000, 2), /* NAND */ 45f8c08ab4SKunihiko Hayashi UNIPHIER_RESETX(6, 0x2000, 12), /* ETHER */ 466584b1eaSMasahiro Yamada UNIPHIER_RESETX(8, 0x2000, 10), /* STDMAC */ 476584b1eaSMasahiro Yamada UNIPHIER_RESETX(12, 0x2000, 6), /* GIO */ 486584b1eaSMasahiro Yamada UNIPHIER_RESETX(14, 0x2000, 17), /* USB30 */ 496584b1eaSMasahiro Yamada UNIPHIER_RESETX(15, 0x2004, 17), /* USB31 */ 504fb96c48SMasahiro Yamada UNIPHIER_RESET_END, 514fb96c48SMasahiro Yamada }; 524fb96c48SMasahiro Yamada 531d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_pxs2_sys_reset_data[] = { 546584b1eaSMasahiro Yamada UNIPHIER_RESETX(2, 0x2000, 2), /* NAND */ 55f8c08ab4SKunihiko Hayashi UNIPHIER_RESETX(6, 0x2000, 12), /* ETHER */ 566584b1eaSMasahiro Yamada UNIPHIER_RESETX(8, 0x2000, 10), /* STDMAC */ 576584b1eaSMasahiro Yamada UNIPHIER_RESETX(14, 0x2000, 17), /* USB30 */ 586584b1eaSMasahiro Yamada UNIPHIER_RESETX(15, 0x2004, 17), /* USB31 */ 594fb96c48SMasahiro Yamada UNIPHIER_RESETX(16, 0x2014, 4), /* USB30-PHY0 */ 604fb96c48SMasahiro Yamada UNIPHIER_RESETX(17, 0x2014, 0), /* USB30-PHY1 */ 614fb96c48SMasahiro Yamada UNIPHIER_RESETX(18, 0x2014, 2), /* USB30-PHY2 */ 624fb96c48SMasahiro Yamada UNIPHIER_RESETX(20, 0x2014, 5), /* USB31-PHY0 */ 634fb96c48SMasahiro Yamada UNIPHIER_RESETX(21, 0x2014, 1), /* USB31-PHY1 */ 644fb96c48SMasahiro Yamada UNIPHIER_RESETX(28, 0x2014, 12), /* SATA */ 654fb96c48SMasahiro Yamada UNIPHIER_RESET(29, 0x2014, 8), /* SATA-PHY (active high) */ 664fb96c48SMasahiro Yamada UNIPHIER_RESET_END, 674fb96c48SMasahiro Yamada }; 684fb96c48SMasahiro Yamada 691d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_ld20_sys_reset_data[] = { 706584b1eaSMasahiro Yamada UNIPHIER_RESETX(2, 0x200c, 0), /* NAND */ 716584b1eaSMasahiro Yamada UNIPHIER_RESETX(4, 0x200c, 2), /* eMMC */ 72f8c08ab4SKunihiko Hayashi UNIPHIER_RESETX(6, 0x200c, 6), /* ETHER */ 736584b1eaSMasahiro Yamada UNIPHIER_RESETX(8, 0x200c, 8), /* STDMAC */ 746584b1eaSMasahiro Yamada UNIPHIER_RESETX(12, 0x200c, 5), /* GIO */ 754fb96c48SMasahiro Yamada UNIPHIER_RESETX(16, 0x200c, 12), /* USB30-PHY0 */ 764fb96c48SMasahiro Yamada UNIPHIER_RESETX(17, 0x200c, 13), /* USB30-PHY1 */ 774fb96c48SMasahiro Yamada UNIPHIER_RESETX(18, 0x200c, 14), /* USB30-PHY2 */ 784fb96c48SMasahiro Yamada UNIPHIER_RESETX(19, 0x200c, 15), /* USB30-PHY3 */ 794fb96c48SMasahiro Yamada UNIPHIER_RESET_END, 804fb96c48SMasahiro Yamada }; 814fb96c48SMasahiro Yamada 82111689e7SMasahiro Yamada static const struct uniphier_reset_data uniphier_pxs3_sys_reset_data[] = { 83111689e7SMasahiro Yamada UNIPHIER_RESETX(2, 0x200c, 0), /* NAND */ 84111689e7SMasahiro Yamada UNIPHIER_RESETX(4, 0x200c, 2), /* eMMC */ 85f8c08ab4SKunihiko Hayashi UNIPHIER_RESETX(6, 0x200c, 9), /* ETHER0 */ 86f8c08ab4SKunihiko Hayashi UNIPHIER_RESETX(7, 0x200c, 10), /* ETHER1 */ 87111689e7SMasahiro Yamada UNIPHIER_RESETX(8, 0x200c, 12), /* STDMAC */ 88111689e7SMasahiro Yamada UNIPHIER_RESETX(12, 0x200c, 5), /* USB30 (GIO0) */ 89111689e7SMasahiro Yamada UNIPHIER_RESETX(13, 0x200c, 6), /* USB31 (GIO1) */ 90111689e7SMasahiro Yamada UNIPHIER_RESETX(16, 0x200c, 16), /* USB30-PHY */ 91111689e7SMasahiro Yamada UNIPHIER_RESETX(20, 0x200c, 17), /* USB31-PHY */ 92111689e7SMasahiro Yamada UNIPHIER_RESET_END, 93111689e7SMasahiro Yamada }; 94111689e7SMasahiro Yamada 954fb96c48SMasahiro Yamada /* Media I/O reset data */ 964fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_SD(id, ch) \ 974fb96c48SMasahiro Yamada UNIPHIER_RESETX((id), 0x110 + 0x200 * (ch), 0) 984fb96c48SMasahiro Yamada 994fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_SD_BRIDGE(id, ch) \ 1004fb96c48SMasahiro Yamada UNIPHIER_RESETX((id), 0x110 + 0x200 * (ch), 26) 1014fb96c48SMasahiro Yamada 1024fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_EMMC_HW_RESET(id, ch) \ 1034fb96c48SMasahiro Yamada UNIPHIER_RESETX((id), 0x80 + 0x200 * (ch), 0) 1044fb96c48SMasahiro Yamada 1054fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_USB2(id, ch) \ 1064fb96c48SMasahiro Yamada UNIPHIER_RESETX((id), 0x114 + 0x200 * (ch), 0) 1074fb96c48SMasahiro Yamada 1084fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_USB2_BRIDGE(id, ch) \ 1094fb96c48SMasahiro Yamada UNIPHIER_RESETX((id), 0x110 + 0x200 * (ch), 24) 1104fb96c48SMasahiro Yamada 1114fb96c48SMasahiro Yamada #define UNIPHIER_MIO_RESET_DMAC(id) \ 1124fb96c48SMasahiro Yamada UNIPHIER_RESETX((id), 0x110, 17) 1134fb96c48SMasahiro Yamada 1141d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_mio_reset_data[] = { 1154fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_SD(0, 0), 1164fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_SD(1, 1), 1174fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_SD(2, 2), 1184fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_SD_BRIDGE(3, 0), 1194fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_SD_BRIDGE(4, 1), 1204fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_SD_BRIDGE(5, 2), 1214fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_EMMC_HW_RESET(6, 1), 1224fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_DMAC(7), 1234fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_USB2(8, 0), 1244fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_USB2(9, 1), 1254fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_USB2(10, 2), 1264fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_USB2(11, 3), 1274fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_USB2_BRIDGE(12, 0), 1284fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_USB2_BRIDGE(13, 1), 1294fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_USB2_BRIDGE(14, 2), 1304fb96c48SMasahiro Yamada UNIPHIER_MIO_RESET_USB2_BRIDGE(15, 3), 1314fb96c48SMasahiro Yamada UNIPHIER_RESET_END, 1324fb96c48SMasahiro Yamada }; 1334fb96c48SMasahiro Yamada 1344fb96c48SMasahiro Yamada /* Peripheral reset data */ 1354fb96c48SMasahiro Yamada #define UNIPHIER_PERI_RESET_UART(id, ch) \ 1364fb96c48SMasahiro Yamada UNIPHIER_RESETX((id), 0x114, 19 + (ch)) 1374fb96c48SMasahiro Yamada 1384fb96c48SMasahiro Yamada #define UNIPHIER_PERI_RESET_I2C(id, ch) \ 1394fb96c48SMasahiro Yamada UNIPHIER_RESETX((id), 0x114, 5 + (ch)) 1404fb96c48SMasahiro Yamada 1414fb96c48SMasahiro Yamada #define UNIPHIER_PERI_RESET_FI2C(id, ch) \ 1424fb96c48SMasahiro Yamada UNIPHIER_RESETX((id), 0x114, 24 + (ch)) 1434fb96c48SMasahiro Yamada 1441d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_ld4_peri_reset_data[] = { 1454fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_UART(0, 0), 1464fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_UART(1, 1), 1474fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_UART(2, 2), 1484fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_UART(3, 3), 1494fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_I2C(4, 0), 1504fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_I2C(5, 1), 1514fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_I2C(6, 2), 1524fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_I2C(7, 3), 1534fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_I2C(8, 4), 1544fb96c48SMasahiro Yamada UNIPHIER_RESET_END, 1554fb96c48SMasahiro Yamada }; 1564fb96c48SMasahiro Yamada 1571d21e1b9SMasahiro Yamada static const struct uniphier_reset_data uniphier_pro4_peri_reset_data[] = { 1584fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_UART(0, 0), 1594fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_UART(1, 1), 1604fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_UART(2, 2), 1614fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_UART(3, 3), 1624fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_FI2C(4, 0), 1634fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_FI2C(5, 1), 1644fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_FI2C(6, 2), 1654fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_FI2C(7, 3), 1664fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_FI2C(8, 4), 1674fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_FI2C(9, 5), 1684fb96c48SMasahiro Yamada UNIPHIER_PERI_RESET_FI2C(10, 6), 1694fb96c48SMasahiro Yamada UNIPHIER_RESET_END, 1704fb96c48SMasahiro Yamada }; 1714fb96c48SMasahiro Yamada 1724fb96c48SMasahiro Yamada /* core implementaton */ 1734fb96c48SMasahiro Yamada struct uniphier_reset_priv { 1744fb96c48SMasahiro Yamada void __iomem *base; 1754fb96c48SMasahiro Yamada const struct uniphier_reset_data *data; 1764fb96c48SMasahiro Yamada }; 1774fb96c48SMasahiro Yamada 1784fb96c48SMasahiro Yamada static int uniphier_reset_request(struct reset_ctl *reset_ctl) 1794fb96c48SMasahiro Yamada { 1804fb96c48SMasahiro Yamada return 0; 1814fb96c48SMasahiro Yamada } 1824fb96c48SMasahiro Yamada 1834fb96c48SMasahiro Yamada static int uniphier_reset_free(struct reset_ctl *reset_ctl) 1844fb96c48SMasahiro Yamada { 1854fb96c48SMasahiro Yamada return 0; 1864fb96c48SMasahiro Yamada } 1874fb96c48SMasahiro Yamada 1884fb96c48SMasahiro Yamada static int uniphier_reset_update(struct reset_ctl *reset_ctl, int assert) 1894fb96c48SMasahiro Yamada { 1904fb96c48SMasahiro Yamada struct uniphier_reset_priv *priv = dev_get_priv(reset_ctl->dev); 1914fb96c48SMasahiro Yamada unsigned long id = reset_ctl->id; 1924fb96c48SMasahiro Yamada const struct uniphier_reset_data *p; 1934fb96c48SMasahiro Yamada 1944fb96c48SMasahiro Yamada for (p = priv->data; p->id != UNIPHIER_RESET_ID_END; p++) { 1954fb96c48SMasahiro Yamada u32 mask, val; 1964fb96c48SMasahiro Yamada 1974fb96c48SMasahiro Yamada if (p->id != id) 1984fb96c48SMasahiro Yamada continue; 1994fb96c48SMasahiro Yamada 2004fb96c48SMasahiro Yamada val = readl(priv->base + p->reg); 2014fb96c48SMasahiro Yamada 2024fb96c48SMasahiro Yamada if (p->flags & UNIPHIER_RESET_ACTIVE_LOW) 2034fb96c48SMasahiro Yamada assert = !assert; 2044fb96c48SMasahiro Yamada 2054fb96c48SMasahiro Yamada mask = BIT(p->bit); 2064fb96c48SMasahiro Yamada 2074fb96c48SMasahiro Yamada if (assert) 2084fb96c48SMasahiro Yamada val |= mask; 2094fb96c48SMasahiro Yamada else 2104fb96c48SMasahiro Yamada val &= ~mask; 2114fb96c48SMasahiro Yamada 2124fb96c48SMasahiro Yamada writel(val, priv->base + p->reg); 2134fb96c48SMasahiro Yamada 2144fb96c48SMasahiro Yamada return 0; 2154fb96c48SMasahiro Yamada } 2164fb96c48SMasahiro Yamada 217def4eadbSMasahiro Yamada dev_err(reset_ctl->dev, "reset_id=%lu was not handled\n", id); 218def4eadbSMasahiro Yamada 2194fb96c48SMasahiro Yamada return -EINVAL; 2204fb96c48SMasahiro Yamada } 2214fb96c48SMasahiro Yamada 2224fb96c48SMasahiro Yamada static int uniphier_reset_assert(struct reset_ctl *reset_ctl) 2234fb96c48SMasahiro Yamada { 2244fb96c48SMasahiro Yamada return uniphier_reset_update(reset_ctl, 1); 2254fb96c48SMasahiro Yamada } 2264fb96c48SMasahiro Yamada 2274fb96c48SMasahiro Yamada static int uniphier_reset_deassert(struct reset_ctl *reset_ctl) 2284fb96c48SMasahiro Yamada { 2294fb96c48SMasahiro Yamada return uniphier_reset_update(reset_ctl, 0); 2304fb96c48SMasahiro Yamada } 2314fb96c48SMasahiro Yamada 2324fb96c48SMasahiro Yamada static const struct reset_ops uniphier_reset_ops = { 2334fb96c48SMasahiro Yamada .request = uniphier_reset_request, 2344fb96c48SMasahiro Yamada .free = uniphier_reset_free, 2354fb96c48SMasahiro Yamada .rst_assert = uniphier_reset_assert, 2364fb96c48SMasahiro Yamada .rst_deassert = uniphier_reset_deassert, 2374fb96c48SMasahiro Yamada }; 2384fb96c48SMasahiro Yamada 2394fb96c48SMasahiro Yamada static int uniphier_reset_probe(struct udevice *dev) 2404fb96c48SMasahiro Yamada { 2414fb96c48SMasahiro Yamada struct uniphier_reset_priv *priv = dev_get_priv(dev); 2424fb96c48SMasahiro Yamada fdt_addr_t addr; 2434fb96c48SMasahiro Yamada 244a821c4afSSimon Glass addr = devfdt_get_addr(dev->parent); 2454fb96c48SMasahiro Yamada if (addr == FDT_ADDR_T_NONE) 2464fb96c48SMasahiro Yamada return -EINVAL; 2474fb96c48SMasahiro Yamada 2484fb96c48SMasahiro Yamada priv->base = devm_ioremap(dev, addr, SZ_4K); 2494fb96c48SMasahiro Yamada if (!priv->base) 2504fb96c48SMasahiro Yamada return -ENOMEM; 2514fb96c48SMasahiro Yamada 2524fb96c48SMasahiro Yamada priv->data = (void *)dev_get_driver_data(dev); 2534fb96c48SMasahiro Yamada 2544fb96c48SMasahiro Yamada return 0; 2554fb96c48SMasahiro Yamada } 2564fb96c48SMasahiro Yamada 2574fb96c48SMasahiro Yamada static const struct udevice_id uniphier_reset_match[] = { 2584fb96c48SMasahiro Yamada /* System reset */ 2594fb96c48SMasahiro Yamada { 2604fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-ld4-reset", 2616584b1eaSMasahiro Yamada .data = (ulong)uniphier_pro4_sys_reset_data, 2624fb96c48SMasahiro Yamada }, 2634fb96c48SMasahiro Yamada { 2644fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-pro4-reset", 2654fb96c48SMasahiro Yamada .data = (ulong)uniphier_pro4_sys_reset_data, 2664fb96c48SMasahiro Yamada }, 2674fb96c48SMasahiro Yamada { 2684fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-sld8-reset", 2696584b1eaSMasahiro Yamada .data = (ulong)uniphier_pro4_sys_reset_data, 2704fb96c48SMasahiro Yamada }, 2714fb96c48SMasahiro Yamada { 2724fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-pro5-reset", 2736584b1eaSMasahiro Yamada .data = (ulong)uniphier_pro4_sys_reset_data, 2744fb96c48SMasahiro Yamada }, 2754fb96c48SMasahiro Yamada { 2764fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-pxs2-reset", 2774fb96c48SMasahiro Yamada .data = (ulong)uniphier_pxs2_sys_reset_data, 2784fb96c48SMasahiro Yamada }, 2794fb96c48SMasahiro Yamada { 2804fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-ld11-reset", 2816584b1eaSMasahiro Yamada .data = (ulong)uniphier_ld20_sys_reset_data, 2824fb96c48SMasahiro Yamada }, 2834fb96c48SMasahiro Yamada { 2844fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-ld20-reset", 2854fb96c48SMasahiro Yamada .data = (ulong)uniphier_ld20_sys_reset_data, 2864fb96c48SMasahiro Yamada }, 287111689e7SMasahiro Yamada { 288111689e7SMasahiro Yamada .compatible = "socionext,uniphier-pxs3-reset", 289111689e7SMasahiro Yamada .data = (ulong)uniphier_pxs3_sys_reset_data, 290111689e7SMasahiro Yamada }, 2914fb96c48SMasahiro Yamada /* Media I/O reset */ 2924fb96c48SMasahiro Yamada { 2934fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-ld4-mio-reset", 2944fb96c48SMasahiro Yamada .data = (ulong)uniphier_mio_reset_data, 2954fb96c48SMasahiro Yamada }, 2964fb96c48SMasahiro Yamada { 2974fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-pro4-mio-reset", 2984fb96c48SMasahiro Yamada .data = (ulong)uniphier_mio_reset_data, 2994fb96c48SMasahiro Yamada }, 3004fb96c48SMasahiro Yamada { 3014fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-sld8-mio-reset", 3024fb96c48SMasahiro Yamada .data = (ulong)uniphier_mio_reset_data, 3034fb96c48SMasahiro Yamada }, 3044fb96c48SMasahiro Yamada { 3054fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-pro5-mio-reset", 3064fb96c48SMasahiro Yamada .data = (ulong)uniphier_mio_reset_data, 3074fb96c48SMasahiro Yamada }, 3084fb96c48SMasahiro Yamada { 3094fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-pxs2-mio-reset", 3104fb96c48SMasahiro Yamada .data = (ulong)uniphier_mio_reset_data, 3114fb96c48SMasahiro Yamada }, 3124fb96c48SMasahiro Yamada { 3134fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-ld11-mio-reset", 3144fb96c48SMasahiro Yamada .data = (ulong)uniphier_mio_reset_data, 3154fb96c48SMasahiro Yamada }, 3164fb96c48SMasahiro Yamada { 3171fc84d6bSMasahiro Yamada .compatible = "socionext,uniphier-ld11-sd-reset", 3181fc84d6bSMasahiro Yamada .data = (ulong)uniphier_mio_reset_data, 3191fc84d6bSMasahiro Yamada }, 3201fc84d6bSMasahiro Yamada { 3211fc84d6bSMasahiro Yamada .compatible = "socionext,uniphier-ld20-sd-reset", 3224fb96c48SMasahiro Yamada .data = (ulong)uniphier_mio_reset_data, 3234fb96c48SMasahiro Yamada }, 324111689e7SMasahiro Yamada { 325111689e7SMasahiro Yamada .compatible = "socionext,uniphier-pxs3-sd-reset", 326111689e7SMasahiro Yamada .data = (ulong)uniphier_mio_reset_data, 327111689e7SMasahiro Yamada }, 3284fb96c48SMasahiro Yamada /* Peripheral reset */ 3294fb96c48SMasahiro Yamada { 3304fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-ld4-peri-reset", 3314fb96c48SMasahiro Yamada .data = (ulong)uniphier_ld4_peri_reset_data, 3324fb96c48SMasahiro Yamada }, 3334fb96c48SMasahiro Yamada { 3344fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-pro4-peri-reset", 3354fb96c48SMasahiro Yamada .data = (ulong)uniphier_pro4_peri_reset_data, 3364fb96c48SMasahiro Yamada }, 3374fb96c48SMasahiro Yamada { 3384fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-sld8-peri-reset", 3394fb96c48SMasahiro Yamada .data = (ulong)uniphier_ld4_peri_reset_data, 3404fb96c48SMasahiro Yamada }, 3414fb96c48SMasahiro Yamada { 3424fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-pro5-peri-reset", 3434fb96c48SMasahiro Yamada .data = (ulong)uniphier_pro4_peri_reset_data, 3444fb96c48SMasahiro Yamada }, 3454fb96c48SMasahiro Yamada { 3464fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-pxs2-peri-reset", 3474fb96c48SMasahiro Yamada .data = (ulong)uniphier_pro4_peri_reset_data, 3484fb96c48SMasahiro Yamada }, 3494fb96c48SMasahiro Yamada { 3504fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-ld11-peri-reset", 3514fb96c48SMasahiro Yamada .data = (ulong)uniphier_pro4_peri_reset_data, 3524fb96c48SMasahiro Yamada }, 3534fb96c48SMasahiro Yamada { 3544fb96c48SMasahiro Yamada .compatible = "socionext,uniphier-ld20-peri-reset", 3554fb96c48SMasahiro Yamada .data = (ulong)uniphier_pro4_peri_reset_data, 3564fb96c48SMasahiro Yamada }, 357111689e7SMasahiro Yamada { 358111689e7SMasahiro Yamada .compatible = "socionext,uniphier-pxs3-peri-reset", 359111689e7SMasahiro Yamada .data = (ulong)uniphier_pro4_peri_reset_data, 360111689e7SMasahiro Yamada }, 3614fb96c48SMasahiro Yamada { /* sentinel */ } 3624fb96c48SMasahiro Yamada }; 3634fb96c48SMasahiro Yamada 3644fb96c48SMasahiro Yamada U_BOOT_DRIVER(uniphier_reset) = { 3654fb96c48SMasahiro Yamada .name = "uniphier-reset", 3664fb96c48SMasahiro Yamada .id = UCLASS_RESET, 3674fb96c48SMasahiro Yamada .of_match = uniphier_reset_match, 3684fb96c48SMasahiro Yamada .probe = uniphier_reset_probe, 3694fb96c48SMasahiro Yamada .priv_auto_alloc_size = sizeof(struct uniphier_reset_priv), 3704fb96c48SMasahiro Yamada .ops = &uniphier_reset_ops, 3714fb96c48SMasahiro Yamada }; 372