Lines Matching defs:gpriv

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