mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-21 20:34:38 +00:00
remoteproc: k3_system_controller: Support optional boot_notification channel
If there is an optional boot notification channel that an SoC uses separate from the rx path, use the same. Signed-off-by: Nishanth Menon <nm@ti.com>
This commit is contained in:
parent
8b139f4e1c
commit
473bd5aee1
2 changed files with 22 additions and 1 deletions
|
@ -13,6 +13,9 @@ Required properties:
|
||||||
"rx" for Receive channel
|
"rx" for Receive channel
|
||||||
- mboxes: Corresponding phandles to mailbox channels.
|
- mboxes: Corresponding phandles to mailbox channels.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
--------------------
|
||||||
|
- mbox-names: "boot_notify" for Optional alternate boot notification channel.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
--------
|
--------
|
||||||
|
|
|
@ -77,14 +77,18 @@ struct k3_sysctrler_desc {
|
||||||
* struct k3_sysctrler_privdata - Structure representing System Controller data.
|
* struct k3_sysctrler_privdata - Structure representing System Controller data.
|
||||||
* @chan_tx: Transmit mailbox channel
|
* @chan_tx: Transmit mailbox channel
|
||||||
* @chan_rx: Receive mailbox channel
|
* @chan_rx: Receive mailbox channel
|
||||||
|
* @chan_boot_notify: Boot notification channel
|
||||||
* @desc: SoC description for this instance
|
* @desc: SoC description for this instance
|
||||||
* @seq_nr: Counter for number of messages sent.
|
* @seq_nr: Counter for number of messages sent.
|
||||||
|
* @has_boot_notify: Has separate boot notification channel
|
||||||
*/
|
*/
|
||||||
struct k3_sysctrler_privdata {
|
struct k3_sysctrler_privdata {
|
||||||
struct mbox_chan chan_tx;
|
struct mbox_chan chan_tx;
|
||||||
struct mbox_chan chan_rx;
|
struct mbox_chan chan_rx;
|
||||||
|
struct mbox_chan chan_boot_notify;
|
||||||
struct k3_sysctrler_desc *desc;
|
struct k3_sysctrler_desc *desc;
|
||||||
u32 seq_nr;
|
u32 seq_nr;
|
||||||
|
bool has_boot_notify;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
|
@ -223,7 +227,8 @@ static int k3_sysctrler_start(struct udevice *dev)
|
||||||
debug("%s(dev=%p)\n", __func__, dev);
|
debug("%s(dev=%p)\n", __func__, dev);
|
||||||
|
|
||||||
/* Receive the boot notification. Note that it is sent only once. */
|
/* Receive the boot notification. Note that it is sent only once. */
|
||||||
ret = mbox_recv(&priv->chan_rx, &msg, priv->desc->max_rx_timeout_us);
|
ret = mbox_recv(priv->has_boot_notify ? &priv->chan_boot_notify :
|
||||||
|
&priv->chan_rx, &msg, priv->desc->max_rx_timeout_us);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "%s: Boot Notification response failed. ret = %d\n",
|
dev_err(dev, "%s: Boot Notification response failed. ret = %d\n",
|
||||||
__func__, ret);
|
__func__, ret);
|
||||||
|
@ -272,6 +277,19 @@ static int k3_of_to_priv(struct udevice *dev,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Some SoCs may have a optional channel for boot notification. */
|
||||||
|
priv->has_boot_notify = 1;
|
||||||
|
ret = mbox_get_by_name(dev, "boot_notify", &priv->chan_boot_notify);
|
||||||
|
if (ret == -ENODATA) {
|
||||||
|
dev_dbg(dev, "%s: Acquiring optional Boot_notify failed. ret = %d. Using Rx\n",
|
||||||
|
__func__, ret);
|
||||||
|
priv->has_boot_notify = 0;
|
||||||
|
} else if (ret) {
|
||||||
|
dev_err(dev, "%s: Acquiring boot_notify channel failed. ret = %d\n",
|
||||||
|
__func__, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue