rptun: add rptun_panic for both master & salve
Signed-off-by: ligd <liguiding1@xiaomi.com>
This commit is contained in:
parent
c9404e2705
commit
7471d096cc
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user