• Home
  • Raw
  • Download

Lines Matching +full:pwrap +full:- +full:bridge

1 // SPDX-License-Identifier: GPL-2.0-only
71 /* Group of bits used for shown pwrap capability */
1063 * pwrap operations are highly associated with the PMIC types,
1093 /* Flags indicating the capability for the target pwrap */
1101 return readl(wrp->base + wrp->master->regs[reg]); in pwrap_readl()
1106 writel(val, wrp->base + wrp->master->regs[reg]); in pwrap_writel()
1159 return fp(wrp) ? 0 : -ETIMEDOUT; in pwrap_wait_for_state()
1218 return wrp->slave->pwrap_read(wrp, adr, rdata); in pwrap_read()
1254 * for the synchronization between two successive 16-bit in pwrap_write32()
1255 * pwrap_writel operations composing one 32-bit bus writing. in pwrap_write32()
1256 * Otherwise, we'll find the result fails on the lower 16-bit in pwrap_write32()
1257 * pwrap writing. in pwrap_write32()
1268 return wrp->slave->pwrap_write(wrp, adr, wdata); in pwrap_write()
1291 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_CSL, in pwrap_reset_spislave()
1293 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_OUTS, in pwrap_reset_spislave()
1295 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_CSH, in pwrap_reset_spislave()
1299 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_OUTS, in pwrap_reset_spislave()
1304 dev_err(wrp->dev, "%s fail, ret=%d\n", __func__, ret); in pwrap_reset_spislave()
1315 * pwrap_init_sidly - configure serial input delay
1326 -1, 0, 1, 0, 2, -1, 1, 1, 3, -1, -1, -1, 3, -1, 2, 1 in pwrap_init_sidly()
1331 pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_READ_TEST], in pwrap_init_sidly()
1334 dev_dbg(wrp->dev, "[Read Test] pass, SIDLY=%x\n", i); in pwrap_init_sidly()
1340 dev_err(wrp->dev, "sidly pass range 0x%x not continuous\n", in pwrap_init_sidly()
1342 return -EIO; in pwrap_init_sidly()
1356 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_DIO_EN], 1); in pwrap_init_dual_io()
1362 dev_err(wrp->dev, "%s fail, ret=%d\n", __func__, ret); in pwrap_init_dual_io()
1370 wrp->slave->dew_regs[PWRAP_DEW_READ_TEST], &rdata); in pwrap_init_dual_io()
1372 dev_err(wrp->dev, in pwrap_init_dual_io()
1375 return -EFAULT; in pwrap_init_dual_io()
1383 * phase during data transactions on the pwrap bus.
1408 switch (wrp->master->type) { in pwrap_common_init_reg_clock()
1425 switch (wrp->slave->type) { in pwrap_mt2701_init_reg_clock()
1433 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_RDDMY_NO], in pwrap_mt2701_init_reg_clock()
1454 ret = pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_RDY], in pwrap_is_pmic_cipher_ready()
1472 switch (wrp->master->type) { in pwrap_init_cipher()
1493 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_SWRST], 0x1); in pwrap_init_cipher()
1494 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_SWRST], 0x0); in pwrap_init_cipher()
1495 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_KEY_SEL], 0x1); in pwrap_init_cipher()
1496 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_IV_SEL], 0x2); in pwrap_init_cipher()
1498 switch (wrp->slave->type) { in pwrap_init_cipher()
1500 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_LOAD], in pwrap_init_cipher()
1502 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_START], in pwrap_init_cipher()
1508 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_EN], in pwrap_init_cipher()
1518 dev_err(wrp->dev, "cipher data ready@AP fail, ret=%d\n", ret); in pwrap_init_cipher()
1525 dev_err(wrp->dev, in pwrap_init_cipher()
1531 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_MODE], 0x1); in pwrap_init_cipher()
1534 dev_err(wrp->dev, "cipher mode idle fail, ret=%d\n", ret); in pwrap_init_cipher()
1541 if (pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_WRITE_TEST], in pwrap_init_cipher()
1543 pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_WRITE_TEST], in pwrap_init_cipher()
1546 dev_err(wrp->dev, "rdata=0x%04X\n", rdata); in pwrap_init_cipher()
1547 return -EFAULT; in pwrap_init_cipher()
1562 /* Signature checking - using CRC */ in pwrap_init_security()
1564 wrp->slave->dew_regs[PWRAP_DEW_CRC_EN], 0x1)) in pwrap_init_security()
1565 return -EFAULT; in pwrap_init_security()
1569 pwrap_writel(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_VAL], in pwrap_init_security()
1572 wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN); in pwrap_init_security()
1579 /* enable pwrap events and pwrap bridge in AP side */ in pwrap_mt8135_init_soc_specific()
1582 writel(0x7f, wrp->bridge_base + PWRAP_MT8135_BRIDGE_IORD_ARB_EN); in pwrap_mt8135_init_soc_specific()
1583 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WACS3_EN); in pwrap_mt8135_init_soc_specific()
1584 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WACS4_EN); in pwrap_mt8135_init_soc_specific()
1585 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WDT_UNIT); in pwrap_mt8135_init_soc_specific()
1586 writel(0xffff, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WDT_SRC_EN); in pwrap_mt8135_init_soc_specific()
1587 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_TIMER_EN); in pwrap_mt8135_init_soc_specific()
1588 writel(0x7ff, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INT_EN); in pwrap_mt8135_init_soc_specific()
1591 if (pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_OUT_EN], in pwrap_mt8135_init_soc_specific()
1593 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_SRC_EN], in pwrap_mt8135_init_soc_specific()
1595 dev_err(wrp->dev, "enable dewrap fail\n"); in pwrap_mt8135_init_soc_specific()
1596 return -EFAULT; in pwrap_mt8135_init_soc_specific()
1605 if (pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_OUT_EN], in pwrap_mt8173_init_soc_specific()
1607 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_SRC_EN], in pwrap_mt8173_init_soc_specific()
1609 dev_err(wrp->dev, "enable dewrap fail\n"); in pwrap_mt8173_init_soc_specific()
1610 return -EFAULT; in pwrap_mt8173_init_soc_specific()
1619 switch (wrp->slave->type) { in pwrap_mt2701_init_soc_specific()
1647 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_EN], 0x1); in pwrap_mt8183_init_soc_specific()
1664 if (wrp->rstc) in pwrap_init()
1665 reset_control_reset(wrp->rstc); in pwrap_init()
1666 if (wrp->rstc_bridge) in pwrap_init()
1667 reset_control_reset(wrp->rstc_bridge); in pwrap_init()
1669 if (wrp->master->type == PWRAP_MT8173) { in pwrap_init()
1675 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SPI)) { in pwrap_init()
1684 pwrap_writel(wrp, wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN); in pwrap_init()
1688 ret = wrp->master->init_reg_clock(wrp); in pwrap_init()
1692 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SPI)) { in pwrap_init()
1699 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_DUALIO)) { in pwrap_init()
1706 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SECURITY)) { in pwrap_init()
1713 if (wrp->master->type == PWRAP_MT8135) in pwrap_init()
1722 if (wrp->master->init_soc_specific) { in pwrap_init()
1723 ret = wrp->master->init_soc_specific(wrp); in pwrap_init()
1733 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_BRIDGE)) { in pwrap_init()
1734 writel(1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INIT_DONE3); in pwrap_init()
1735 writel(1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INIT_DONE4); in pwrap_init()
1747 dev_err(wrp->dev, "unexpected interrupt int=0x%x\n", rdata); in pwrap_interrupt()
1750 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_INT1_EN)) { in pwrap_interrupt()
1752 dev_err(wrp->dev, "unexpected interrupt int1=0x%x\n", rdata); in pwrap_interrupt()
1862 .compatible = "mediatek,mt6380-regulator",
1990 .compatible = "mediatek,mt2701-pwrap",
1993 .compatible = "mediatek,mt6765-pwrap",
1996 .compatible = "mediatek,mt6779-pwrap",
1999 .compatible = "mediatek,mt6797-pwrap",
2002 .compatible = "mediatek,mt7622-pwrap",
2005 .compatible = "mediatek,mt8135-pwrap",
2008 .compatible = "mediatek,mt8173-pwrap",
2011 .compatible = "mediatek,mt8183-pwrap",
2014 .compatible = "mediatek,mt8516-pwrap",
2026 struct device_node *np = pdev->dev.of_node; in pwrap_probe()
2030 if (np->child) in pwrap_probe()
2031 of_slave_id = of_match_node(of_slave_match_tbl, np->child); in pwrap_probe()
2034 dev_dbg(&pdev->dev, "slave pmic should be defined in dts\n"); in pwrap_probe()
2035 return -EINVAL; in pwrap_probe()
2038 wrp = devm_kzalloc(&pdev->dev, sizeof(*wrp), GFP_KERNEL); in pwrap_probe()
2040 return -ENOMEM; in pwrap_probe()
2044 wrp->master = of_device_get_match_data(&pdev->dev); in pwrap_probe()
2045 wrp->slave = of_slave_id->data; in pwrap_probe()
2046 wrp->dev = &pdev->dev; in pwrap_probe()
2048 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pwrap"); in pwrap_probe()
2049 wrp->base = devm_ioremap_resource(wrp->dev, res); in pwrap_probe()
2050 if (IS_ERR(wrp->base)) in pwrap_probe()
2051 return PTR_ERR(wrp->base); in pwrap_probe()
2053 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_RESET)) { in pwrap_probe()
2054 wrp->rstc = devm_reset_control_get(wrp->dev, "pwrap"); in pwrap_probe()
2055 if (IS_ERR(wrp->rstc)) { in pwrap_probe()
2056 ret = PTR_ERR(wrp->rstc); in pwrap_probe()
2057 dev_dbg(wrp->dev, "cannot get pwrap reset: %d\n", ret); in pwrap_probe()
2062 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_BRIDGE)) { in pwrap_probe()
2064 "pwrap-bridge"); in pwrap_probe()
2065 wrp->bridge_base = devm_ioremap_resource(wrp->dev, res); in pwrap_probe()
2066 if (IS_ERR(wrp->bridge_base)) in pwrap_probe()
2067 return PTR_ERR(wrp->bridge_base); in pwrap_probe()
2069 wrp->rstc_bridge = devm_reset_control_get(wrp->dev, in pwrap_probe()
2070 "pwrap-bridge"); in pwrap_probe()
2071 if (IS_ERR(wrp->rstc_bridge)) { in pwrap_probe()
2072 ret = PTR_ERR(wrp->rstc_bridge); in pwrap_probe()
2073 dev_dbg(wrp->dev, in pwrap_probe()
2074 "cannot get pwrap-bridge reset: %d\n", ret); in pwrap_probe()
2079 wrp->clk_spi = devm_clk_get(wrp->dev, "spi"); in pwrap_probe()
2080 if (IS_ERR(wrp->clk_spi)) { in pwrap_probe()
2081 dev_dbg(wrp->dev, "failed to get clock: %ld\n", in pwrap_probe()
2082 PTR_ERR(wrp->clk_spi)); in pwrap_probe()
2083 return PTR_ERR(wrp->clk_spi); in pwrap_probe()
2086 wrp->clk_wrap = devm_clk_get(wrp->dev, "wrap"); in pwrap_probe()
2087 if (IS_ERR(wrp->clk_wrap)) { in pwrap_probe()
2088 dev_dbg(wrp->dev, "failed to get clock: %ld\n", in pwrap_probe()
2089 PTR_ERR(wrp->clk_wrap)); in pwrap_probe()
2090 return PTR_ERR(wrp->clk_wrap); in pwrap_probe()
2093 ret = clk_prepare_enable(wrp->clk_spi); in pwrap_probe()
2097 ret = clk_prepare_enable(wrp->clk_wrap); in pwrap_probe()
2102 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_DCM)) { in pwrap_probe()
2114 dev_dbg(wrp->dev, "init failed with %d\n", ret); in pwrap_probe()
2120 dev_dbg(wrp->dev, "initialization isn't finished\n"); in pwrap_probe()
2121 ret = -ENODEV; in pwrap_probe()
2131 pwrap_writel(wrp, wrp->master->wdt_src, PWRAP_WDT_SRC_EN); in pwrap_probe()
2132 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_WDT_SRC1)) in pwrap_probe()
2133 pwrap_writel(wrp, wrp->master->wdt_src, PWRAP_WDT_SRC_EN_1); in pwrap_probe()
2136 pwrap_writel(wrp, wrp->master->int_en_all, PWRAP_INT_EN); in pwrap_probe()
2141 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_INT1_EN)) in pwrap_probe()
2142 pwrap_writel(wrp, wrp->master->int1_en_all, PWRAP_INT1_EN); in pwrap_probe()
2145 ret = devm_request_irq(wrp->dev, irq, pwrap_interrupt, in pwrap_probe()
2147 "mt-pmic-pwrap", wrp); in pwrap_probe()
2151 wrp->regmap = devm_regmap_init(wrp->dev, NULL, wrp, wrp->slave->regmap); in pwrap_probe()
2152 if (IS_ERR(wrp->regmap)) { in pwrap_probe()
2153 ret = PTR_ERR(wrp->regmap); in pwrap_probe()
2157 ret = of_platform_populate(np, NULL, NULL, wrp->dev); in pwrap_probe()
2159 dev_dbg(wrp->dev, "failed to create child devices at %pOF\n", in pwrap_probe()
2167 clk_disable_unprepare(wrp->clk_wrap); in pwrap_probe()
2169 clk_disable_unprepare(wrp->clk_spi); in pwrap_probe()
2176 .name = "mt-pmic-pwrap",