Lines Matching refs:wrp

381 static inline int pwrap_is_mt8135(struct pmic_wrapper *wrp)  in pwrap_is_mt8135()  argument
383 return wrp->type == PWRAP_MT8135; in pwrap_is_mt8135()
386 static inline int pwrap_is_mt8173(struct pmic_wrapper *wrp) in pwrap_is_mt8173() argument
388 return wrp->type == PWRAP_MT8173; in pwrap_is_mt8173()
391 static u32 pwrap_readl(struct pmic_wrapper *wrp, enum pwrap_regs reg) in pwrap_readl() argument
393 return readl(wrp->base + wrp->regs[reg]); in pwrap_readl()
396 static void pwrap_writel(struct pmic_wrapper *wrp, u32 val, enum pwrap_regs reg) in pwrap_writel() argument
398 writel(val, wrp->base + wrp->regs[reg]); in pwrap_writel()
401 static bool pwrap_is_fsm_idle(struct pmic_wrapper *wrp) in pwrap_is_fsm_idle() argument
403 u32 val = pwrap_readl(wrp, PWRAP_WACS2_RDATA); in pwrap_is_fsm_idle()
408 static bool pwrap_is_fsm_vldclr(struct pmic_wrapper *wrp) in pwrap_is_fsm_vldclr() argument
410 u32 val = pwrap_readl(wrp, PWRAP_WACS2_RDATA); in pwrap_is_fsm_vldclr()
415 static bool pwrap_is_sync_idle(struct pmic_wrapper *wrp) in pwrap_is_sync_idle() argument
417 return pwrap_readl(wrp, PWRAP_WACS2_RDATA) & PWRAP_STATE_SYNC_IDLE0; in pwrap_is_sync_idle()
420 static bool pwrap_is_fsm_idle_and_sync_idle(struct pmic_wrapper *wrp) in pwrap_is_fsm_idle_and_sync_idle() argument
422 u32 val = pwrap_readl(wrp, PWRAP_WACS2_RDATA); in pwrap_is_fsm_idle_and_sync_idle()
428 static int pwrap_wait_for_state(struct pmic_wrapper *wrp, in pwrap_wait_for_state() argument
437 return fp(wrp) ? 0 : -ETIMEDOUT; in pwrap_wait_for_state()
438 if (fp(wrp)) in pwrap_wait_for_state()
443 static int pwrap_write(struct pmic_wrapper *wrp, u32 adr, u32 wdata) in pwrap_write() argument
447 ret = pwrap_wait_for_state(wrp, pwrap_is_fsm_idle); in pwrap_write()
451 pwrap_writel(wrp, (1 << 31) | ((adr >> 1) << 16) | wdata, in pwrap_write()
457 static int pwrap_read(struct pmic_wrapper *wrp, u32 adr, u32 *rdata) in pwrap_read() argument
461 ret = pwrap_wait_for_state(wrp, pwrap_is_fsm_idle); in pwrap_read()
465 pwrap_writel(wrp, (adr >> 1) << 16, PWRAP_WACS2_CMD); in pwrap_read()
467 ret = pwrap_wait_for_state(wrp, pwrap_is_fsm_vldclr); in pwrap_read()
471 *rdata = PWRAP_GET_WACS_RDATA(pwrap_readl(wrp, PWRAP_WACS2_RDATA)); in pwrap_read()
473 pwrap_writel(wrp, 1, PWRAP_WACS2_VLDCLR); in pwrap_read()
488 static int pwrap_reset_spislave(struct pmic_wrapper *wrp) in pwrap_reset_spislave() argument
492 pwrap_writel(wrp, 0, PWRAP_HIPRIO_ARB_EN); in pwrap_reset_spislave()
493 pwrap_writel(wrp, 0, PWRAP_WRAP_EN); in pwrap_reset_spislave()
494 pwrap_writel(wrp, 1, PWRAP_MUX_SEL); in pwrap_reset_spislave()
495 pwrap_writel(wrp, 1, PWRAP_MAN_EN); in pwrap_reset_spislave()
496 pwrap_writel(wrp, 0, PWRAP_DIO_EN); in pwrap_reset_spislave()
498 pwrap_writel(wrp, PWRAP_MAN_CMD_SPI_WRITE | PWRAP_MAN_CMD_OP_CSL, in pwrap_reset_spislave()
500 pwrap_writel(wrp, PWRAP_MAN_CMD_SPI_WRITE | PWRAP_MAN_CMD_OP_OUTS, in pwrap_reset_spislave()
502 pwrap_writel(wrp, PWRAP_MAN_CMD_SPI_WRITE | PWRAP_MAN_CMD_OP_CSH, in pwrap_reset_spislave()
506 pwrap_writel(wrp, PWRAP_MAN_CMD_SPI_WRITE | PWRAP_MAN_CMD_OP_OUTS, in pwrap_reset_spislave()
509 ret = pwrap_wait_for_state(wrp, pwrap_is_sync_idle); in pwrap_reset_spislave()
511 dev_err(wrp->dev, "%s fail, ret=%d\n", __func__, ret); in pwrap_reset_spislave()
515 pwrap_writel(wrp, 0, PWRAP_MAN_EN); in pwrap_reset_spislave()
516 pwrap_writel(wrp, 0, PWRAP_MUX_SEL); in pwrap_reset_spislave()
527 static int pwrap_init_sidly(struct pmic_wrapper *wrp) in pwrap_init_sidly() argument
537 pwrap_writel(wrp, i, PWRAP_SIDLY); in pwrap_init_sidly()
538 pwrap_read(wrp, PWRAP_DEW_READ_TEST, &rdata); in pwrap_init_sidly()
540 dev_dbg(wrp->dev, "[Read Test] pass, SIDLY=%x\n", i); in pwrap_init_sidly()
546 dev_err(wrp->dev, "sidly pass range 0x%x not continuous\n", in pwrap_init_sidly()
551 pwrap_writel(wrp, dly[pass], PWRAP_SIDLY); in pwrap_init_sidly()
556 static int pwrap_init_reg_clock(struct pmic_wrapper *wrp) in pwrap_init_reg_clock() argument
558 if (pwrap_is_mt8135(wrp)) { in pwrap_init_reg_clock()
559 pwrap_writel(wrp, 0x4, PWRAP_CSHEXT); in pwrap_init_reg_clock()
560 pwrap_writel(wrp, 0x0, PWRAP_CSHEXT_WRITE); in pwrap_init_reg_clock()
561 pwrap_writel(wrp, 0x4, PWRAP_CSHEXT_READ); in pwrap_init_reg_clock()
562 pwrap_writel(wrp, 0x0, PWRAP_CSLEXT_START); in pwrap_init_reg_clock()
563 pwrap_writel(wrp, 0x0, PWRAP_CSLEXT_END); in pwrap_init_reg_clock()
565 pwrap_writel(wrp, 0x0, PWRAP_CSHEXT_WRITE); in pwrap_init_reg_clock()
566 pwrap_writel(wrp, 0x4, PWRAP_CSHEXT_READ); in pwrap_init_reg_clock()
567 pwrap_writel(wrp, 0x2, PWRAP_CSLEXT_START); in pwrap_init_reg_clock()
568 pwrap_writel(wrp, 0x2, PWRAP_CSLEXT_END); in pwrap_init_reg_clock()
574 static bool pwrap_is_cipher_ready(struct pmic_wrapper *wrp) in pwrap_is_cipher_ready() argument
576 return pwrap_readl(wrp, PWRAP_CIPHER_RDY) & 1; in pwrap_is_cipher_ready()
579 static bool pwrap_is_pmic_cipher_ready(struct pmic_wrapper *wrp) in pwrap_is_pmic_cipher_ready() argument
584 ret = pwrap_read(wrp, PWRAP_DEW_CIPHER_RDY, &rdata); in pwrap_is_pmic_cipher_ready()
591 static int pwrap_init_cipher(struct pmic_wrapper *wrp) in pwrap_init_cipher() argument
596 pwrap_writel(wrp, 0x1, PWRAP_CIPHER_SWRST); in pwrap_init_cipher()
597 pwrap_writel(wrp, 0x0, PWRAP_CIPHER_SWRST); in pwrap_init_cipher()
598 pwrap_writel(wrp, 0x1, PWRAP_CIPHER_KEY_SEL); in pwrap_init_cipher()
599 pwrap_writel(wrp, 0x2, PWRAP_CIPHER_IV_SEL); in pwrap_init_cipher()
601 if (pwrap_is_mt8135(wrp)) { in pwrap_init_cipher()
602 pwrap_writel(wrp, 1, PWRAP_CIPHER_LOAD); in pwrap_init_cipher()
603 pwrap_writel(wrp, 1, PWRAP_CIPHER_START); in pwrap_init_cipher()
605 pwrap_writel(wrp, 1, PWRAP_CIPHER_EN); in pwrap_init_cipher()
609 pwrap_write(wrp, PWRAP_DEW_CIPHER_SWRST, 0x1); in pwrap_init_cipher()
610 pwrap_write(wrp, PWRAP_DEW_CIPHER_SWRST, 0x0); in pwrap_init_cipher()
611 pwrap_write(wrp, PWRAP_DEW_CIPHER_KEY_SEL, 0x1); in pwrap_init_cipher()
612 pwrap_write(wrp, PWRAP_DEW_CIPHER_IV_SEL, 0x2); in pwrap_init_cipher()
613 pwrap_write(wrp, PWRAP_DEW_CIPHER_LOAD, 0x1); in pwrap_init_cipher()
614 pwrap_write(wrp, PWRAP_DEW_CIPHER_START, 0x1); in pwrap_init_cipher()
617 ret = pwrap_wait_for_state(wrp, pwrap_is_cipher_ready); in pwrap_init_cipher()
619 dev_err(wrp->dev, "cipher data ready@AP fail, ret=%d\n", ret); in pwrap_init_cipher()
624 ret = pwrap_wait_for_state(wrp, pwrap_is_pmic_cipher_ready); in pwrap_init_cipher()
626 dev_err(wrp->dev, "timeout waiting for cipher data ready@PMIC\n"); in pwrap_init_cipher()
631 pwrap_write(wrp, PWRAP_DEW_CIPHER_MODE, 0x1); in pwrap_init_cipher()
632 ret = pwrap_wait_for_state(wrp, pwrap_is_fsm_idle_and_sync_idle); in pwrap_init_cipher()
634 dev_err(wrp->dev, "cipher mode idle fail, ret=%d\n", ret); in pwrap_init_cipher()
638 pwrap_writel(wrp, 1, PWRAP_CIPHER_MODE); in pwrap_init_cipher()
641 if (pwrap_write(wrp, PWRAP_DEW_WRITE_TEST, PWRAP_DEW_WRITE_TEST_VAL) || in pwrap_init_cipher()
642 pwrap_read(wrp, PWRAP_DEW_WRITE_TEST, &rdata) || in pwrap_init_cipher()
644 dev_err(wrp->dev, "rdata=0x%04X\n", rdata); in pwrap_init_cipher()
651 static int pwrap_init(struct pmic_wrapper *wrp) in pwrap_init() argument
656 reset_control_reset(wrp->rstc); in pwrap_init()
657 if (wrp->rstc_bridge) in pwrap_init()
658 reset_control_reset(wrp->rstc_bridge); in pwrap_init()
660 if (pwrap_is_mt8173(wrp)) { in pwrap_init()
662 pwrap_writel(wrp, 3, PWRAP_DCM_EN); in pwrap_init()
663 pwrap_writel(wrp, 0, PWRAP_DCM_DBC_PRD); in pwrap_init()
667 ret = pwrap_reset_spislave(wrp); in pwrap_init()
671 pwrap_writel(wrp, 1, PWRAP_WRAP_EN); in pwrap_init()
673 pwrap_writel(wrp, wrp->arb_en_all, PWRAP_HIPRIO_ARB_EN); in pwrap_init()
675 pwrap_writel(wrp, 1, PWRAP_WACS2_EN); in pwrap_init()
677 ret = pwrap_init_reg_clock(wrp); in pwrap_init()
682 ret = pwrap_init_sidly(wrp); in pwrap_init()
687 pwrap_write(wrp, PWRAP_DEW_DIO_EN, 1); in pwrap_init()
690 ret = pwrap_wait_for_state(wrp, pwrap_is_fsm_idle_and_sync_idle); in pwrap_init()
692 dev_err(wrp->dev, "%s fail, ret=%d\n", __func__, ret); in pwrap_init()
696 pwrap_writel(wrp, 1, PWRAP_DIO_EN); in pwrap_init()
699 pwrap_read(wrp, PWRAP_DEW_READ_TEST, &rdata); in pwrap_init()
701 dev_err(wrp->dev, "Read test failed after switch to DIO mode: 0x%04x != 0x%04x\n", in pwrap_init()
707 ret = pwrap_init_cipher(wrp); in pwrap_init()
712 if (pwrap_write(wrp, PWRAP_DEW_CRC_EN, 0x1)) in pwrap_init()
715 pwrap_writel(wrp, 0x1, PWRAP_CRC_EN); in pwrap_init()
716 pwrap_writel(wrp, 0x0, PWRAP_SIG_MODE); in pwrap_init()
717 pwrap_writel(wrp, PWRAP_DEW_CRC_VAL, PWRAP_SIG_ADR); in pwrap_init()
718 pwrap_writel(wrp, wrp->arb_en_all, PWRAP_HIPRIO_ARB_EN); in pwrap_init()
720 if (pwrap_is_mt8135(wrp)) in pwrap_init()
721 pwrap_writel(wrp, 0x7, PWRAP_RRARB_EN); in pwrap_init()
723 pwrap_writel(wrp, 0x1, PWRAP_WACS0_EN); in pwrap_init()
724 pwrap_writel(wrp, 0x1, PWRAP_WACS1_EN); in pwrap_init()
725 pwrap_writel(wrp, 0x1, PWRAP_WACS2_EN); in pwrap_init()
726 pwrap_writel(wrp, 0x5, PWRAP_STAUPD_PRD); in pwrap_init()
727 pwrap_writel(wrp, 0xff, PWRAP_STAUPD_GRPEN); in pwrap_init()
728 pwrap_writel(wrp, 0xf, PWRAP_WDT_UNIT); in pwrap_init()
729 pwrap_writel(wrp, 0xffffffff, PWRAP_WDT_SRC_EN); in pwrap_init()
730 pwrap_writel(wrp, 0x1, PWRAP_TIMER_EN); in pwrap_init()
731 pwrap_writel(wrp, ~((1 << 31) | (1 << 1)), PWRAP_INT_EN); in pwrap_init()
733 if (pwrap_is_mt8135(wrp)) { in pwrap_init()
735 pwrap_writel(wrp, 0x1, PWRAP_EVENT_IN_EN); in pwrap_init()
736 pwrap_writel(wrp, 0xffff, PWRAP_EVENT_DST_EN); in pwrap_init()
737 writel(0x7f, wrp->bridge_base + PWRAP_MT8135_BRIDGE_IORD_ARB_EN); in pwrap_init()
738 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WACS3_EN); in pwrap_init()
739 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WACS4_EN); in pwrap_init()
740 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WDT_UNIT); in pwrap_init()
741 writel(0xffff, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WDT_SRC_EN); in pwrap_init()
742 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_TIMER_EN); in pwrap_init()
743 writel(0x7ff, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INT_EN); in pwrap_init()
746 if (pwrap_write(wrp, PWRAP_DEW_EVENT_OUT_EN, 0x1) || in pwrap_init()
747 pwrap_write(wrp, PWRAP_DEW_EVENT_SRC_EN, 0xffff)) { in pwrap_init()
748 dev_err(wrp->dev, "enable dewrap fail\n"); in pwrap_init()
753 if (pwrap_write(wrp, PWRAP_DEW_EVENT_OUT_EN, 0x1) || in pwrap_init()
754 pwrap_write(wrp, PWRAP_DEW_EVENT_SRC_EN, 0xffff)) { in pwrap_init()
755 dev_err(wrp->dev, "enable dewrap fail\n"); in pwrap_init()
761 pwrap_writel(wrp, 1, PWRAP_INIT_DONE2); in pwrap_init()
762 pwrap_writel(wrp, 1, PWRAP_INIT_DONE0); in pwrap_init()
763 pwrap_writel(wrp, 1, PWRAP_INIT_DONE1); in pwrap_init()
765 if (pwrap_is_mt8135(wrp)) { in pwrap_init()
766 writel(1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INIT_DONE3); in pwrap_init()
767 writel(1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INIT_DONE4); in pwrap_init()
776 struct pmic_wrapper *wrp = dev_id; in pwrap_interrupt() local
778 rdata = pwrap_readl(wrp, PWRAP_INT_FLG); in pwrap_interrupt()
780 dev_err(wrp->dev, "unexpected interrupt int=0x%x\n", rdata); in pwrap_interrupt()
782 pwrap_writel(wrp, 0xffffffff, PWRAP_INT_CLR); in pwrap_interrupt()
812 struct pmic_wrapper *wrp; in pwrap_probe() local
819 wrp = devm_kzalloc(&pdev->dev, sizeof(*wrp), GFP_KERNEL); in pwrap_probe()
820 if (!wrp) in pwrap_probe()
823 platform_set_drvdata(pdev, wrp); in pwrap_probe()
826 wrp->regs = type->regs; in pwrap_probe()
827 wrp->type = type->type; in pwrap_probe()
828 wrp->arb_en_all = type->arb_en_all; in pwrap_probe()
829 wrp->dev = &pdev->dev; in pwrap_probe()
832 wrp->base = devm_ioremap_resource(wrp->dev, res); in pwrap_probe()
833 if (IS_ERR(wrp->base)) in pwrap_probe()
834 return PTR_ERR(wrp->base); in pwrap_probe()
836 wrp->rstc = devm_reset_control_get(wrp->dev, "pwrap"); in pwrap_probe()
837 if (IS_ERR(wrp->rstc)) { in pwrap_probe()
838 ret = PTR_ERR(wrp->rstc); in pwrap_probe()
839 dev_dbg(wrp->dev, "cannot get pwrap reset: %d\n", ret); in pwrap_probe()
843 if (pwrap_is_mt8135(wrp)) { in pwrap_probe()
846 wrp->bridge_base = devm_ioremap_resource(wrp->dev, res); in pwrap_probe()
847 if (IS_ERR(wrp->bridge_base)) in pwrap_probe()
848 return PTR_ERR(wrp->bridge_base); in pwrap_probe()
850 wrp->rstc_bridge = devm_reset_control_get(wrp->dev, "pwrap-bridge"); in pwrap_probe()
851 if (IS_ERR(wrp->rstc_bridge)) { in pwrap_probe()
852 ret = PTR_ERR(wrp->rstc_bridge); in pwrap_probe()
853 dev_dbg(wrp->dev, "cannot get pwrap-bridge reset: %d\n", ret); in pwrap_probe()
858 wrp->clk_spi = devm_clk_get(wrp->dev, "spi"); in pwrap_probe()
859 if (IS_ERR(wrp->clk_spi)) { in pwrap_probe()
860 dev_dbg(wrp->dev, "failed to get clock: %ld\n", PTR_ERR(wrp->clk_spi)); in pwrap_probe()
861 return PTR_ERR(wrp->clk_spi); in pwrap_probe()
864 wrp->clk_wrap = devm_clk_get(wrp->dev, "wrap"); in pwrap_probe()
865 if (IS_ERR(wrp->clk_wrap)) { in pwrap_probe()
866 dev_dbg(wrp->dev, "failed to get clock: %ld\n", PTR_ERR(wrp->clk_wrap)); in pwrap_probe()
867 return PTR_ERR(wrp->clk_wrap); in pwrap_probe()
870 ret = clk_prepare_enable(wrp->clk_spi); in pwrap_probe()
874 ret = clk_prepare_enable(wrp->clk_wrap); in pwrap_probe()
879 pwrap_writel(wrp, 1, PWRAP_DCM_EN); in pwrap_probe()
880 pwrap_writel(wrp, 0, PWRAP_DCM_DBC_PRD); in pwrap_probe()
886 if (!pwrap_readl(wrp, PWRAP_INIT_DONE2)) { in pwrap_probe()
887 ret = pwrap_init(wrp); in pwrap_probe()
889 dev_dbg(wrp->dev, "init failed with %d\n", ret); in pwrap_probe()
894 if (!(pwrap_readl(wrp, PWRAP_WACS2_RDATA) & PWRAP_STATE_INIT_DONE0)) { in pwrap_probe()
895 dev_dbg(wrp->dev, "initialization isn't finished\n"); in pwrap_probe()
900 ret = devm_request_irq(wrp->dev, irq, pwrap_interrupt, IRQF_TRIGGER_HIGH, in pwrap_probe()
901 "mt-pmic-pwrap", wrp); in pwrap_probe()
905 wrp->regmap = devm_regmap_init(wrp->dev, NULL, wrp, &pwrap_regmap_config); in pwrap_probe()
906 if (IS_ERR(wrp->regmap)) in pwrap_probe()
907 return PTR_ERR(wrp->regmap); in pwrap_probe()
909 ret = of_platform_populate(np, NULL, NULL, wrp->dev); in pwrap_probe()
911 dev_dbg(wrp->dev, "failed to create child devices at %s\n", in pwrap_probe()
919 clk_disable_unprepare(wrp->clk_wrap); in pwrap_probe()
921 clk_disable_unprepare(wrp->clk_spi); in pwrap_probe()