Beispiel #1
0
static ssize_t rproc_state_write(struct file *filp, const char __user *userbuf,
				 size_t count, loff_t *ppos)
{
	struct rproc *rproc = filp->private_data;
	char buf[10];
	int ret;

	if (count > sizeof(buf) || count <= 0)
		return -EINVAL;

	ret = copy_from_user(buf, userbuf, count);
	if (ret)
		return -EFAULT;

	if (buf[count - 1] == '\n')
		buf[count - 1] = '\0';

	if (!strncmp(buf, "start", count)) {
		ret = rproc_boot(rproc);
		if (ret) {
			dev_err(&rproc->dev, "Boot failed: %d\n", ret);
			return ret;
		}
	} else if (!strncmp(buf, "stop", count)) {
		rproc_shutdown(rproc);
	} else {
		dev_err(&rproc->dev, "Unrecognised option: %s\n", buf);
		return -EINVAL;
	}

	return count;
}
Beispiel #2
0
static struct dma_chan *st_fdma_of_xlate(struct of_phandle_args *dma_spec,
        struct of_dma *ofdma)
{
    struct st_fdma_dev *fdev = ofdma->of_dma_data;
    struct dma_chan *chan;
    struct st_fdma_chan *fchan;
    int ret;

    if (dma_spec->args_count < 1)
        return ERR_PTR(-EINVAL);

    if (fdev->dma_device.dev->of_node != dma_spec->np)
        return ERR_PTR(-EINVAL);

    ret = rproc_boot(fdev->slim_rproc->rproc);
    if (ret == -ENOENT)
        return ERR_PTR(-EPROBE_DEFER);
    else if (ret)
        return ERR_PTR(ret);

    chan = dma_get_any_slave_channel(&fdev->dma_device);
    if (!chan)
        goto err_chan;

    fchan = to_st_fdma_chan(chan);

    fchan->cfg.of_node = dma_spec->np;
    fchan->cfg.req_line = dma_spec->args[0];
    fchan->cfg.req_ctrl = 0;
    fchan->cfg.type = ST_FDMA_TYPE_FREE_RUN;

    if (dma_spec->args_count > 1)
        fchan->cfg.req_ctrl = dma_spec->args[1]
                              & FDMA_REQ_CTRL_CFG_MASK;

    if (dma_spec->args_count > 2)
        fchan->cfg.type = dma_spec->args[2];

    if (fchan->cfg.type == ST_FDMA_TYPE_FREE_RUN) {
        fchan->dreq_line = 0;
    } else {
        fchan->dreq_line = st_fdma_dreq_get(fchan);
        if (IS_ERR_VALUE(fchan->dreq_line)) {
            chan = ERR_PTR(fchan->dreq_line);
            goto err_chan;
        }
    }

    dev_dbg(fdev->dev, "xlate req_line:%d type:%d req_ctrl:%#lx\n",
            fchan->cfg.req_line, fchan->cfg.type, fchan->cfg.req_ctrl);

    return chan;

err_chan:
    rproc_shutdown(fdev->slim_rproc->rproc);
    return chan;

}
Beispiel #3
0
static ssize_t qproc_boot_store(struct device *dev,
				struct device_attribute *attr,
				const char *buf, size_t size)
{
	struct qproc *qproc = dev_get_drvdata(dev);
	int ret;

	ret = rproc_boot(qproc->rproc);
	return ret ? : size;
}
static int wkm3_resume(struct device *dev)
{
	if (m3_rproc_static->is_rtc_only) {
		rproc_shutdown(m3_rproc_static->rproc);
		rproc_boot(m3_rproc_static->rproc);
	}

	m3_rproc_static->is_rtc_only = false;

	return 0;
}
static void wkup_m3_rproc_loader_thread(struct rproc *rproc)
{
	struct wkup_m3_rproc *m3_rproc = rproc->priv;
	struct device *dev = &m3_rproc->pdev->dev;
	int ret;

	wait_for_completion(&rproc->firmware_loading_complete);

	ret = rproc_boot(rproc);
	if (ret)
		dev_err(dev, "rproc_boot failed\n");

	do_exit(0);
}