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