Lines Matching +full:meson +full:- +full:gxbb +full:- +full:mhu
1 // SPDX-License-Identifier: GPL-2.0-only
6 * Copyright (C) 2013-2015 Fujitsu Semiconductor Ltd.
49 struct platform_mhu_link *mlink = chan->con_priv; in platform_mhu_rx_interrupt()
52 val = readl_relaxed(mlink->rx_reg + INTR_STAT_OFS); in platform_mhu_rx_interrupt()
58 writel_relaxed(val, mlink->rx_reg + INTR_CLR_OFS); in platform_mhu_rx_interrupt()
65 struct platform_mhu_link *mlink = chan->con_priv; in platform_mhu_last_tx_done()
66 u32 val = readl_relaxed(mlink->tx_reg + INTR_STAT_OFS); in platform_mhu_last_tx_done()
73 struct platform_mhu_link *mlink = chan->con_priv; in platform_mhu_send_data()
76 writel_relaxed(*arg, mlink->tx_reg + INTR_SET_OFS); in platform_mhu_send_data()
83 struct platform_mhu_link *mlink = chan->con_priv; in platform_mhu_startup()
87 val = readl_relaxed(mlink->tx_reg + INTR_STAT_OFS); in platform_mhu_startup()
88 writel_relaxed(val, mlink->tx_reg + INTR_CLR_OFS); in platform_mhu_startup()
90 ret = request_irq(mlink->irq, platform_mhu_rx_interrupt, in platform_mhu_startup()
93 dev_err(chan->mbox->dev, in platform_mhu_startup()
94 "Unable to acquire IRQ %d\n", mlink->irq); in platform_mhu_startup()
103 struct platform_mhu_link *mlink = chan->con_priv; in platform_mhu_shutdown()
105 free_irq(mlink->irq, chan); in platform_mhu_shutdown()
118 struct platform_mhu *mhu; in platform_mhu_probe() local
119 struct device *dev = &pdev->dev; in platform_mhu_probe()
126 mhu = devm_kzalloc(dev, sizeof(*mhu), GFP_KERNEL); in platform_mhu_probe()
127 if (!mhu) in platform_mhu_probe()
128 return -ENOMEM; in platform_mhu_probe()
131 mhu->base = devm_ioremap_resource(dev, res); in platform_mhu_probe()
132 if (IS_ERR(mhu->base)) { in platform_mhu_probe()
134 return PTR_ERR(mhu->base); in platform_mhu_probe()
138 mhu->chan[i].con_priv = &mhu->mlink[i]; in platform_mhu_probe()
139 mhu->mlink[i].irq = platform_get_irq(pdev, i); in platform_mhu_probe()
140 if (mhu->mlink[i].irq < 0) { in platform_mhu_probe()
142 return mhu->mlink[i].irq; in platform_mhu_probe()
144 mhu->mlink[i].rx_reg = mhu->base + platform_mhu_reg[i]; in platform_mhu_probe()
145 mhu->mlink[i].tx_reg = mhu->mlink[i].rx_reg + TX_REG_OFFSET; in platform_mhu_probe()
148 mhu->mbox.dev = dev; in platform_mhu_probe()
149 mhu->mbox.chans = &mhu->chan[0]; in platform_mhu_probe()
150 mhu->mbox.num_chans = MHU_CHANS; in platform_mhu_probe()
151 mhu->mbox.ops = &platform_mhu_ops; in platform_mhu_probe()
152 mhu->mbox.txdone_irq = false; in platform_mhu_probe()
153 mhu->mbox.txdone_poll = true; in platform_mhu_probe()
154 mhu->mbox.txpoll_period = 1; in platform_mhu_probe()
156 platform_set_drvdata(pdev, mhu); in platform_mhu_probe()
158 err = devm_mbox_controller_register(dev, &mhu->mbox); in platform_mhu_probe()
164 dev_info(dev, "Platform MHU Mailbox registered\n"); in platform_mhu_probe()
169 { .compatible = "amlogic,meson-gxbb-mhu", },
177 .name = "platform-mhu",
185 MODULE_ALIAS("platform:platform-mhu");
186 MODULE_DESCRIPTION("Platform MHU Driver");