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.
50 struct platform_mhu_link *mlink = chan->con_priv; in platform_mhu_rx_interrupt()
53 val = readl_relaxed(mlink->rx_reg + INTR_STAT_OFS); in platform_mhu_rx_interrupt()
59 writel_relaxed(val, mlink->rx_reg + INTR_CLR_OFS); in platform_mhu_rx_interrupt()
66 struct platform_mhu_link *mlink = chan->con_priv; in platform_mhu_last_tx_done()
67 u32 val = readl_relaxed(mlink->tx_reg + INTR_STAT_OFS); in platform_mhu_last_tx_done()
74 struct platform_mhu_link *mlink = chan->con_priv; in platform_mhu_send_data()
77 writel_relaxed(*arg, mlink->tx_reg + INTR_SET_OFS); in platform_mhu_send_data()
84 struct platform_mhu_link *mlink = chan->con_priv; in platform_mhu_startup()
88 val = readl_relaxed(mlink->tx_reg + INTR_STAT_OFS); in platform_mhu_startup()
89 writel_relaxed(val, mlink->tx_reg + INTR_CLR_OFS); in platform_mhu_startup()
91 ret = request_irq(mlink->irq, platform_mhu_rx_interrupt, in platform_mhu_startup()
94 dev_err(chan->mbox->dev, in platform_mhu_startup()
95 "Unable to acquire IRQ %d\n", mlink->irq); in platform_mhu_startup()
104 struct platform_mhu_link *mlink = chan->con_priv; in platform_mhu_shutdown()
106 free_irq(mlink->irq, chan); in platform_mhu_shutdown()
119 struct platform_mhu *mhu; in platform_mhu_probe() local
120 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()
130 mhu->base = devm_platform_ioremap_resource(pdev, 0); in platform_mhu_probe()
131 if (IS_ERR(mhu->base)) { in platform_mhu_probe()
133 return PTR_ERR(mhu->base); in platform_mhu_probe()
137 mhu->chan[i].con_priv = &mhu->mlink[i]; in platform_mhu_probe()
138 mhu->mlink[i].irq = platform_get_irq(pdev, i); in platform_mhu_probe()
139 if (mhu->mlink[i].irq < 0) in platform_mhu_probe()
140 return mhu->mlink[i].irq; in platform_mhu_probe()
141 mhu->mlink[i].rx_reg = mhu->base + platform_mhu_reg[i]; in platform_mhu_probe()
142 mhu->mlink[i].tx_reg = mhu->mlink[i].rx_reg + TX_REG_OFFSET; in platform_mhu_probe()
145 mhu->mbox.dev = dev; in platform_mhu_probe()
146 mhu->mbox.chans = &mhu->chan[0]; in platform_mhu_probe()
147 mhu->mbox.num_chans = MHU_CHANS; in platform_mhu_probe()
148 mhu->mbox.ops = &platform_mhu_ops; in platform_mhu_probe()
149 mhu->mbox.txdone_irq = false; in platform_mhu_probe()
150 mhu->mbox.txdone_poll = true; in platform_mhu_probe()
151 mhu->mbox.txpoll_period = 1; in platform_mhu_probe()
153 platform_set_drvdata(pdev, mhu); in platform_mhu_probe()
155 err = devm_mbox_controller_register(dev, &mhu->mbox); in platform_mhu_probe()
161 dev_info(dev, "Platform MHU Mailbox registered\n"); in platform_mhu_probe()
166 { .compatible = "amlogic,meson-gxbb-mhu", },
174 .name = "platform-mhu",
182 MODULE_ALIAS("platform:platform-mhu");
183 MODULE_DESCRIPTION("Platform MHU Driver");