rptun: add rptun_panic for both master & salve

Signed-off-by: ligd <liguiding1@xiaomi.com>
This commit is contained in:
ligd 2022-01-21 16:20:30 +08:00 committed by Petro Karashchenko
parent c9404e2705
commit 7471d096cc

View File

@ -53,8 +53,9 @@
#define RPTUNIOC_NONE 0
#define NO_HOLDER (INVALID_PROCESS_ID)
#define RPTUN_STATUS_MASK 0xf
#define RPTUN_STATUS_PANIC 0xf
#define RPTUN_STATUS_FROM_MASTER 0x8
#define RPTUN_STATUS_MASK 0x7
#define RPTUN_STATUS_PANIC 0x7
/****************************************************************************
* Private Types
@ -311,23 +312,22 @@ static int rptun_callback(FAR void *arg, uint32_t vqid)
{
FAR struct rptun_priv_s *priv = arg;
if (!RPTUN_IS_MASTER(priv->dev))
{
int status = rpmsg_virtio_get_status(&priv->vdev);
int status = rpmsg_virtio_get_status(&priv->vdev);
if (status & VIRTIO_CONFIG_STATUS_NEEDS_RESET)
if ((status & VIRTIO_CONFIG_STATUS_NEEDS_RESET)
&& (RPTUN_IS_MASTER(priv->dev) ^
!!(status & RPTUN_STATUS_FROM_MASTER)))
{
status &= RPTUN_STATUS_MASK;
if (status == RPTUN_STATUS_PANIC)
{
PANIC();
}
else
{
status &= RPTUN_STATUS_MASK;
if (status == RPTUN_STATUS_PANIC)
{
PANIC();
}
else
{
#ifdef CONFIG_BOARDCTL_RESET
board_reset(status);
board_reset(status);
#endif
}
}
}
@ -725,8 +725,10 @@ static int rptun_dev_reset(FAR struct remoteproc *rproc, int value)
{
FAR struct rptun_priv_s *priv = rproc->priv;
rpmsg_virtio_set_status(&priv->vdev,
(value & RPTUN_STATUS_MASK) | VIRTIO_CONFIG_STATUS_NEEDS_RESET);
value = (value & RPTUN_STATUS_MASK) | VIRTIO_CONFIG_STATUS_NEEDS_RESET
| (RPTUN_IS_MASTER(priv->dev) ? RPTUN_STATUS_FROM_MASTER : 0);
rpmsg_virtio_set_status(&priv->vdev, value);
return RPTUN_NOTIFY(priv->dev, RPTUN_NOTIFY_ALL);
}
@ -1097,8 +1099,7 @@ int rptun_reset(FAR const char *cpuname, int value)
priv = metal_container_of(node, struct rptun_priv_s, node);
if (RPTUN_IS_MASTER(priv->dev) &&
!strcmp(RPTUN_GET_CPUNAME(priv->dev), cpuname))
if (!strcmp(RPTUN_GET_CPUNAME(priv->dev), cpuname))
{
rptun_dev_reset(&priv->rproc, value);
}