char *fw_name = "scp.img";
        int ret, i;
 
-       rproc = rproc_alloc(dev,
-                           np->name,
-                           &scp_ops,
-                           fw_name,
-                           sizeof(*scp));
+       rproc = devm_rproc_alloc(dev, np->name, &scp_ops, fw_name, sizeof(*scp));
        if (!rproc) {
                dev_err(dev, "unable to allocate remoteproc\n");
                return -ENOMEM;
        scp->sram_base = devm_ioremap_resource(dev, res);
        if (IS_ERR((__force void *)scp->sram_base)) {
                dev_err(dev, "Failed to parse and map sram memory\n");
-               ret = PTR_ERR((__force void *)scp->sram_base);
-               goto free_rproc;
+               return PTR_ERR((__force void *)scp->sram_base);
        }
        scp->sram_size = resource_size(res);
        scp->sram_phys = res->start;
                ret = PTR_ERR((__force void *)scp->l1tcm_base);
                if (ret != -EINVAL) {
                        dev_err(dev, "Failed to map l1tcm memory\n");
-                       goto free_rproc;
+                       return ret;
                }
        } else {
                scp->l1tcm_size = resource_size(res);
        for (i = 0; i < SCP_IPI_MAX; i++)
                mutex_destroy(&scp->ipi_desc[i].lock);
        mutex_destroy(&scp->send_lock);
-free_rproc:
-       rproc_free(rproc);
 
        return ret;
 }