Lines Matching refs:gpriv

83 #define RCANFD_GERFL_ERR(gpriv, x)	((x) & (RCANFD_GERFL_EEF1 |\  argument
85 (gpriv->fdmode ?\
496 struct rcar_canfd_global *gpriv; /* Controller reference */ member
623 static int rcar_canfd_reset_controller(struct rcar_canfd_global *gpriv) in rcar_canfd_reset_controller() argument
631 err = readl_poll_timeout((gpriv->base + RCANFD_GSTS), sts, in rcar_canfd_reset_controller()
634 dev_dbg(&gpriv->pdev->dev, "global raminit failed\n"); in rcar_canfd_reset_controller()
639 rcar_canfd_clear_bit(gpriv->base, RCANFD_GCTR, RCANFD_GCTR_GSLPR); in rcar_canfd_reset_controller()
640 rcar_canfd_update_bit(gpriv->base, RCANFD_GCTR, in rcar_canfd_reset_controller()
644 err = readl_poll_timeout((gpriv->base + RCANFD_GSTS), sts, in rcar_canfd_reset_controller()
647 dev_dbg(&gpriv->pdev->dev, "global reset failed\n"); in rcar_canfd_reset_controller()
652 rcar_canfd_write(gpriv->base, RCANFD_GERFL, 0x0); in rcar_canfd_reset_controller()
655 if (gpriv->fdmode) in rcar_canfd_reset_controller()
656 rcar_canfd_set_bit(gpriv->base, RCANFD_GRMCFG, in rcar_canfd_reset_controller()
659 rcar_canfd_clear_bit(gpriv->base, RCANFD_GRMCFG, in rcar_canfd_reset_controller()
663 for_each_set_bit(ch, &gpriv->channels_mask, RCANFD_NUM_CHANNELS) { in rcar_canfd_reset_controller()
664 rcar_canfd_clear_bit(gpriv->base, in rcar_canfd_reset_controller()
667 rcar_canfd_update_bit(gpriv->base, RCANFD_CCTR(ch), in rcar_canfd_reset_controller()
672 err = readl_poll_timeout((gpriv->base + RCANFD_CSTS(ch)), sts, in rcar_canfd_reset_controller()
676 dev_dbg(&gpriv->pdev->dev, in rcar_canfd_reset_controller()
684 static void rcar_canfd_configure_controller(struct rcar_canfd_global *gpriv) in rcar_canfd_configure_controller() argument
693 if (gpriv->fdmode) in rcar_canfd_configure_controller()
698 if (gpriv->fcan != RCANFD_CANFDCLK) in rcar_canfd_configure_controller()
701 rcar_canfd_set_bit(gpriv->base, RCANFD_GCFG, cfg); in rcar_canfd_configure_controller()
704 for_each_set_bit(ch, &gpriv->channels_mask, RCANFD_NUM_CHANNELS) { in rcar_canfd_configure_controller()
705 rcar_canfd_set_bit(gpriv->base, RCANFD_CCTR(ch), in rcar_canfd_configure_controller()
707 rcar_canfd_update_bit(gpriv->base, RCANFD_CCTR(ch), in rcar_canfd_configure_controller()
713 static void rcar_canfd_configure_afl_rules(struct rcar_canfd_global *gpriv, in rcar_canfd_configure_afl_rules() argument
724 cfg = rcar_canfd_read(gpriv->base, RCANFD_GAFLCFG0); in rcar_canfd_configure_afl_rules()
730 rcar_canfd_set_bit(gpriv->base, RCANFD_GAFLECTR, in rcar_canfd_configure_afl_rules()
735 rcar_canfd_set_bit(gpriv->base, RCANFD_GAFLCFG0, in rcar_canfd_configure_afl_rules()
737 if (gpriv->fdmode) in rcar_canfd_configure_afl_rules()
743 rcar_canfd_write(gpriv->base, RCANFD_GAFLID(offset, start), 0); in rcar_canfd_configure_afl_rules()
745 rcar_canfd_write(gpriv->base, RCANFD_GAFLM(offset, start), 0); in rcar_canfd_configure_afl_rules()
747 rcar_canfd_write(gpriv->base, RCANFD_GAFLP0(offset, start), 0); in rcar_canfd_configure_afl_rules()
749 rcar_canfd_write(gpriv->base, RCANFD_GAFLP1(offset, start), in rcar_canfd_configure_afl_rules()
753 rcar_canfd_clear_bit(gpriv->base, in rcar_canfd_configure_afl_rules()
757 static void rcar_canfd_configure_rx(struct rcar_canfd_global *gpriv, u32 ch) in rcar_canfd_configure_rx() argument
767 if (gpriv->fdmode) in rcar_canfd_configure_rx()
774 rcar_canfd_write(gpriv->base, RCANFD_RFCC(ridx), cfg); in rcar_canfd_configure_rx()
777 static void rcar_canfd_configure_tx(struct rcar_canfd_global *gpriv, u32 ch) in rcar_canfd_configure_tx() argument
791 if (gpriv->fdmode) in rcar_canfd_configure_tx()
799 rcar_canfd_write(gpriv->base, RCANFD_CFCC(ch, RCANFD_CFFIFO_IDX), cfg); in rcar_canfd_configure_tx()
801 if (gpriv->fdmode) in rcar_canfd_configure_tx()
803 rcar_canfd_write(gpriv->base, in rcar_canfd_configure_tx()
807 static void rcar_canfd_enable_global_interrupts(struct rcar_canfd_global *gpriv) in rcar_canfd_enable_global_interrupts() argument
812 rcar_canfd_write(gpriv->base, RCANFD_GERFL, 0); in rcar_canfd_enable_global_interrupts()
816 if (gpriv->fdmode) in rcar_canfd_enable_global_interrupts()
819 rcar_canfd_set_bit(gpriv->base, RCANFD_GCTR, ctr); in rcar_canfd_enable_global_interrupts()
823 *gpriv) in rcar_canfd_disable_global_interrupts()
826 rcar_canfd_write(gpriv->base, RCANFD_GCTR, 0); in rcar_canfd_disable_global_interrupts()
829 rcar_canfd_write(gpriv->base, RCANFD_GERFL, 0); in rcar_canfd_disable_global_interrupts()
868 struct rcar_canfd_global *gpriv = priv->gpriv; in rcar_canfd_global_error() local
902 if (gpriv->fdmode && gerfl & RCANFD_GERFL_CMPOF) { in rcar_canfd_global_error()
1075 struct rcar_canfd_global *gpriv = dev_id; in rcar_canfd_global_interrupt() local
1084 for_each_set_bit(ch, &gpriv->channels_mask, RCANFD_NUM_CHANNELS) { in rcar_canfd_global_interrupt()
1085 priv = gpriv->ch[ch]; in rcar_canfd_global_interrupt()
1091 if (unlikely(RCANFD_GERFL_ERR(gpriv, gerfl))) in rcar_canfd_global_interrupt()
1146 struct rcar_canfd_global *gpriv = dev_id; in rcar_canfd_channel_interrupt() local
1153 for_each_set_bit(ch, &gpriv->channels_mask, RCANFD_NUM_CHANNELS) { in rcar_canfd_channel_interrupt()
1154 priv = gpriv->ch[ch]; in rcar_canfd_channel_interrupt()
1266 struct rcar_canfd_global *gpriv = priv->gpriv; in rcar_canfd_open() local
1270 err = clk_prepare_enable(gpriv->can_clk); in rcar_canfd_open()
1293 clk_disable_unprepare(gpriv->can_clk); in rcar_canfd_open()
1329 struct rcar_canfd_global *gpriv = priv->gpriv; in rcar_canfd_close() local
1334 clk_disable_unprepare(gpriv->can_clk); in rcar_canfd_close()
1558 static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch, in rcar_canfd_channel_probe() argument
1561 struct platform_device *pdev = gpriv->pdev; in rcar_canfd_channel_probe()
1577 priv->base = gpriv->base; in rcar_canfd_channel_probe()
1582 if (gpriv->fdmode) { in rcar_canfd_channel_probe()
1598 priv->gpriv = gpriv; in rcar_canfd_channel_probe()
1605 gpriv->ch[priv->channel] = priv; in rcar_canfd_channel_probe()
1622 static void rcar_canfd_channel_remove(struct rcar_canfd_global *gpriv, u32 ch) in rcar_canfd_channel_remove() argument
1624 struct rcar_canfd_channel *priv = gpriv->ch[ch]; in rcar_canfd_channel_remove()
1637 struct rcar_canfd_global *gpriv; in rcar_canfd_probe() local
1667 gpriv = devm_kzalloc(&pdev->dev, sizeof(*gpriv), GFP_KERNEL); in rcar_canfd_probe()
1668 if (!gpriv) { in rcar_canfd_probe()
1672 gpriv->pdev = pdev; in rcar_canfd_probe()
1673 gpriv->channels_mask = channels_mask; in rcar_canfd_probe()
1674 gpriv->fdmode = fdmode; in rcar_canfd_probe()
1677 gpriv->clkp = devm_clk_get(&pdev->dev, "fck"); in rcar_canfd_probe()
1678 if (IS_ERR(gpriv->clkp)) { in rcar_canfd_probe()
1679 err = PTR_ERR(gpriv->clkp); in rcar_canfd_probe()
1688 gpriv->can_clk = devm_clk_get(&pdev->dev, "can_clk"); in rcar_canfd_probe()
1689 if (IS_ERR(gpriv->can_clk) || (clk_get_rate(gpriv->can_clk) == 0)) { in rcar_canfd_probe()
1690 gpriv->can_clk = devm_clk_get(&pdev->dev, "canfd"); in rcar_canfd_probe()
1691 if (IS_ERR(gpriv->can_clk)) { in rcar_canfd_probe()
1692 err = PTR_ERR(gpriv->can_clk); in rcar_canfd_probe()
1697 gpriv->fcan = RCANFD_CANFDCLK; in rcar_canfd_probe()
1700 gpriv->fcan = RCANFD_EXTCLK; in rcar_canfd_probe()
1702 fcan_freq = clk_get_rate(gpriv->can_clk); in rcar_canfd_probe()
1704 if (gpriv->fcan == RCANFD_CANFDCLK) in rcar_canfd_probe()
1713 gpriv->base = addr; in rcar_canfd_probe()
1718 "canfd.chn", gpriv); in rcar_canfd_probe()
1726 "canfd.gbl", gpriv); in rcar_canfd_probe()
1734 err = clk_prepare_enable(gpriv->clkp); in rcar_canfd_probe()
1741 err = rcar_canfd_reset_controller(gpriv); in rcar_canfd_probe()
1748 rcar_canfd_configure_controller(gpriv); in rcar_canfd_probe()
1751 for_each_set_bit(ch, &gpriv->channels_mask, RCANFD_NUM_CHANNELS) { in rcar_canfd_probe()
1753 rcar_canfd_configure_rx(gpriv, ch); in rcar_canfd_probe()
1756 rcar_canfd_configure_tx(gpriv, ch); in rcar_canfd_probe()
1759 rcar_canfd_configure_afl_rules(gpriv, ch); in rcar_canfd_probe()
1763 rcar_canfd_enable_global_interrupts(gpriv); in rcar_canfd_probe()
1766 rcar_canfd_update_bit(gpriv->base, RCANFD_GCTR, RCANFD_GCTR_GMDC_MASK, in rcar_canfd_probe()
1770 err = readl_poll_timeout((gpriv->base + RCANFD_GSTS), sts, in rcar_canfd_probe()
1777 for_each_set_bit(ch, &gpriv->channels_mask, RCANFD_NUM_CHANNELS) { in rcar_canfd_probe()
1778 err = rcar_canfd_channel_probe(gpriv, ch, fcan_freq); in rcar_canfd_probe()
1783 platform_set_drvdata(pdev, gpriv); in rcar_canfd_probe()
1785 gpriv->fcan, gpriv->fdmode); in rcar_canfd_probe()
1789 for_each_set_bit(ch, &gpriv->channels_mask, RCANFD_NUM_CHANNELS) in rcar_canfd_probe()
1790 rcar_canfd_channel_remove(gpriv, ch); in rcar_canfd_probe()
1792 rcar_canfd_disable_global_interrupts(gpriv); in rcar_canfd_probe()
1794 clk_disable_unprepare(gpriv->clkp); in rcar_canfd_probe()
1801 struct rcar_canfd_global *gpriv = platform_get_drvdata(pdev); in rcar_canfd_remove() local
1804 rcar_canfd_reset_controller(gpriv); in rcar_canfd_remove()
1805 rcar_canfd_disable_global_interrupts(gpriv); in rcar_canfd_remove()
1807 for_each_set_bit(ch, &gpriv->channels_mask, RCANFD_NUM_CHANNELS) { in rcar_canfd_remove()
1808 rcar_canfd_disable_channel_interrupts(gpriv->ch[ch]); in rcar_canfd_remove()
1809 rcar_canfd_channel_remove(gpriv, ch); in rcar_canfd_remove()
1813 rcar_canfd_set_bit(gpriv->base, RCANFD_GCTR, RCANFD_GCTR_GSLPR); in rcar_canfd_remove()
1814 clk_disable_unprepare(gpriv->clkp); in rcar_canfd_remove()