vpu_log_cmd(cmdid, idx);
count_cmd(&ctx->statistic, cmdid);
record_log_info(ctx, LOG_COMMAND, cmdid, 0);
- mutex_lock(&ctx->dev->cmd_mutex);
+
+ spin_lock(&ctx->dev->cmd_spinlock);
rpc_send_cmd_buf(&ctx->dev->shared_mem, idx, cmdid, cmdnum, local_cmddata);
- mutex_unlock(&ctx->dev->cmd_mutex);
mb();
MU_SendMessage(ctx->dev->mu_base_virtaddr, 0, COMMAND);
+ spin_unlock(&ctx->dev->cmd_spinlock);
}
static struct vpu_dec_cmd_request vpu_dec_cmds[] = {
VPU_REG_BASE);
/*CM0 use relative address*/
+ spin_lock(&dev->cmd_spinlock);
MU_sendMesgToFW(dev->mu_base_virtaddr,
RPC_BUF_OFFSET,
vpu_dec_cpu_phy_to_mu(dev, dev->m0_rpc_phy));
BOOT_ADDRESS,
dev->m0_p_fw_space_phy);
MU_sendMesgToFW(dev->mu_base_virtaddr, INIT_DONE, 2);
+ spin_unlock(&dev->cmd_spinlock);
} else if (msg == 0x55) {
dev->firmware_started = true;
return -EINVAL;
mutex_init(&dev->dev_mutex);
- mutex_init(&dev->cmd_mutex);
+ spin_lock_init(&dev->cmd_spinlock);
mutex_init(&dev->fw_flow_mutex);
init_completion(&dev->start_cmp);
init_completion(&dev->snap_done_cmp);
u_int32 m0_rpc_phy;
u_int32 m0_rpc_size;
struct mutex dev_mutex;
- struct mutex cmd_mutex;
+ spinlock_t cmd_spinlock;
struct mutex fw_flow_mutex;
bool fw_is_ready;
bool firmware_started;
vpu_log_cmd(cmdid, idx);
count_cmd(&core->attr[idx], cmdid);
- mutex_lock(&core->cmd_mutex);
+ spin_lock(&core->cmd_spinlock);
rpc_send_cmd_buf_encoder(&core->shared_mem, idx,
cmdid, cmdnum, local_cmddata);
mb();
MU_SendMessage(core->mu_base_virtaddr, 0, COMMAND);
- mutex_unlock(&core->cmd_mutex);
+ spin_unlock(&core->cmd_spinlock);
}
static void vpu_ctx_send_cmd(struct vpu_ctx *ctx, uint32_t cmdid,
dev->print_buf = dev->m0_rpc_virt + dev->rpc_buf_size;
mu_addr = cpu_phy_to_mu(dev, dev->m0_rpc_phy);
+ spin_lock(&dev->cmd_spinlock);
MU_sendMesgToFW(dev->mu_base_virtaddr, RPC_BUF_OFFSET, mu_addr);
-
MU_sendMesgToFW(dev->mu_base_virtaddr, BOOT_ADDRESS,
dev->m0_p_fw_space_phy);
MU_sendMesgToFW(dev->mu_base_virtaddr, INIT_DONE, 2);
+ spin_unlock(&dev->cmd_spinlock);
}
static void get_core_supported_instance_count(struct core_device *core)
if (!core_dev)
return -EINVAL;
- mutex_init(&core_dev->cmd_mutex);
+ spin_lock_init(&core_dev->cmd_spinlock);
init_completion(&core_dev->start_cmp);
init_completion(&core_dev->snap_done_cmp);
u32 rpc_actual_size;
struct print_buf_desc *print_buf;
- struct mutex cmd_mutex;
+ spinlock_t cmd_spinlock;
bool fw_is_ready;
bool firmware_started;
struct completion start_cmp;