Lines Matching refs:mhu
49 * @mhu: Pointer to parent mailbox device
54 struct arm_mhu *mhu;
79 void __iomem *base = chan_info->mhu->mlink[chan_info->pchan].rx_reg;
84 static unsigned int mhu_db_mbox_irq_to_pchan_num(struct arm_mhu *mhu, int irq)
89 if (mhu->mlink[pchan].irq == irq)
95 mhu_db_mbox_irq_to_channel(struct arm_mhu *mhu, unsigned int pchan)
100 struct mbox_controller *mbox = &mhu->mbox;
101 void __iomem *base = mhu->mlink[pchan].rx_reg;
127 struct arm_mhu *mhu = data;
128 unsigned int pchan = mhu_db_mbox_irq_to_pchan_num(mhu, irq);
130 while (NULL != (chan = mhu_db_mbox_irq_to_channel(mhu, pchan))) {
141 void __iomem *base = chan_info->mhu->mlink[chan_info->pchan].tx_reg;
152 void __iomem *base = chan_info->mhu->mlink[chan_info->pchan].tx_reg;
169 struct mbox_controller *mbox = &chan_info->mhu->mbox;
190 struct arm_mhu *mhu = dev_get_drvdata(mbox->dev);
229 chan_info->mhu = mhu;
252 struct arm_mhu *mhu;
260 if (!of_device_is_compatible(np, "arm,mhu-doorbell"))
276 mhu = devm_kzalloc(dev, sizeof(*mhu), GFP_KERNEL);
277 if (!mhu)
280 mhu->base = devm_ioremap_resource(dev, &adev->res);
281 if (IS_ERR(mhu->base)) {
283 return PTR_ERR(mhu->base);
290 mhu->dev = dev;
291 mhu->mbox.dev = dev;
292 mhu->mbox.chans = chans;
293 mhu->mbox.num_chans = max_chans;
294 mhu->mbox.txdone_irq = false;
295 mhu->mbox.txdone_poll = true;
296 mhu->mbox.txpoll_period = 1;
298 mhu->mbox.of_xlate = mhu_db_mbox_xlate;
299 amba_set_drvdata(adev, mhu);
301 mhu->mbox.ops = &mhu_db_ops;
303 err = devm_mbox_controller_register(dev, &mhu->mbox);
310 int irq = mhu->mlink[i].irq = adev->irq[i];
317 mhu->mlink[i].rx_reg = mhu->base + mhu_reg[i];
318 mhu->mlink[i].tx_reg = mhu->mlink[i].rx_reg + TX_REG_OFFSET;
322 IRQF_ONESHOT, "mhu_db_link", mhu);
325 mbox_controller_unregister(&mhu->mbox);
345 .name = "mhu-doorbell",