remoteproc fixes for v5.7
This fixes a regression in the probe error path of the Qualcomm modem remoteproc driver and a mix up of phy_addr_t and dma_addr_t in the Mediatek SCP control driver. -----BEGIN PGP SIGNATURE----- iQJPBAABCAA5FiEEBd4DzF816k8JZtUlCx85Pw2ZrcUFAl6gzV4bHGJqb3JuLmFu ZGVyc3NvbkBsaW5hcm8ub3JnAAoJEAsfOT8Nma3FsjwQAIuUG1XqHoHxLoXubIEU wRK0cKbbE87GaGgsnHtnt/oqlXCY6mkPN5Z9ADBPA3bRxSg/jUiqC2DaIzVrbFPX x/a5UUr+N9B76+8QXCEg5w+HbJFM9HAMNT7IOXRddivBwduxgGzdfIiWZOouFKTV yRYlThb1iUiSWSMi0tGTXM4SQXNFs6HrTBh4Xt+Z3bRDp39esmPXbIennwkXn+9d A2Z9UrjOWLh7X80Iu0kvd3nQcQjMvESd6rG0bbuA7B126/htuL0VVFW93JEOs2yn xtuoinMKto+pXBzhdUOXXOs85aFLQ1DW48H3tEfjfJsnAG/iJe/EB9j3H64Fdj8f YgZvaveGzjuP7+5V1CnsLKbdIf/QhIQlKXAXE+8BN3kjQXEek4+otEM2cLZCh8bI 2FNVVmDwV/UqmVb5Xg5LTz+QbL+IsjjiOojXAjOBT7scVBDygutku2vFEVc84nTt OJeYQ+UVon8SraM3qZqgjUKkle9Nwu9YjsotR7tvO9VSmAyAzqLDetotPVzBo3UQ CvGKoqBrYYdm2Wz1G6QT70d74DdgNYwXK6K/NZg+Cresl0g5X54fCdfZBxnwtgmF hgIPexeYAbwm4Z8vdcKtxPhxMEVivBFgbVujNIdOdo8JDgpx6EmFozJ7EopAziN2 NlzSYuuNigToV3MFxf+ubFco =WDtr -----END PGP SIGNATURE----- Merge tag 'rproc-v5.7-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc Pull remoteproc fixes from Bjorn Andersson: "This fixes a regression in the probe error path of the Qualcomm modem remoteproc driver and a mix up of phy_addr_t and dma_addr_t in the Mediatek SCP control driver" * tag 'rproc-v5.7-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc: remoteproc: mtk_scp: use dma_addr_t for DMA API remoteproc: qcom_q6v5_mss: fix q6v5_probe() error paths remoteproc: qcom_q6v5_mss: fix a bug in q6v5_probe()
This commit is contained in:
commit
3cda77991e
|
@ -68,7 +68,7 @@ struct mtk_scp {
|
|||
wait_queue_head_t ack_wq;
|
||||
|
||||
void __iomem *cpu_addr;
|
||||
phys_addr_t phys_addr;
|
||||
dma_addr_t dma_addr;
|
||||
size_t dram_size;
|
||||
|
||||
struct rproc_subdev *rpmsg_subdev;
|
||||
|
|
|
@ -330,7 +330,7 @@ static void *scp_da_to_va(struct rproc *rproc, u64 da, size_t len)
|
|||
if (offset >= 0 && (offset + len) < scp->sram_size)
|
||||
return (void __force *)scp->sram_base + offset;
|
||||
} else {
|
||||
offset = da - scp->phys_addr;
|
||||
offset = da - scp->dma_addr;
|
||||
if (offset >= 0 && (offset + len) < scp->dram_size)
|
||||
return (void __force *)scp->cpu_addr + offset;
|
||||
}
|
||||
|
@ -451,7 +451,7 @@ static int scp_map_memory_region(struct mtk_scp *scp)
|
|||
/* Reserved SCP code size */
|
||||
scp->dram_size = MAX_CODE_SIZE;
|
||||
scp->cpu_addr = dma_alloc_coherent(scp->dev, scp->dram_size,
|
||||
&scp->phys_addr, GFP_KERNEL);
|
||||
&scp->dma_addr, GFP_KERNEL);
|
||||
if (!scp->cpu_addr)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -461,7 +461,7 @@ static int scp_map_memory_region(struct mtk_scp *scp)
|
|||
static void scp_unmap_memory_region(struct mtk_scp *scp)
|
||||
{
|
||||
dma_free_coherent(scp->dev, scp->dram_size, scp->cpu_addr,
|
||||
scp->phys_addr);
|
||||
scp->dma_addr);
|
||||
of_reserved_mem_device_release(scp->dev);
|
||||
}
|
||||
|
||||
|
|
|
@ -367,7 +367,7 @@ unroll_pd_votes:
|
|||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
|
||||
static void q6v5_pds_disable(struct q6v5 *qproc, struct device **pds,
|
||||
size_t pd_count)
|
||||
|
@ -1527,7 +1527,7 @@ unroll_attach:
|
|||
dev_pm_domain_detach(devs[i], false);
|
||||
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
|
||||
static void q6v5_pds_detach(struct q6v5 *qproc, struct device **pds,
|
||||
size_t pd_count)
|
||||
|
@ -1675,7 +1675,7 @@ static int q6v5_probe(struct platform_device *pdev)
|
|||
ret = of_property_read_string_index(pdev->dev.of_node, "firmware-name",
|
||||
1, &qproc->hexagon_mdt_image);
|
||||
if (ret < 0 && ret != -EINVAL)
|
||||
return ret;
|
||||
goto free_rproc;
|
||||
|
||||
platform_set_drvdata(pdev, qproc);
|
||||
|
||||
|
@ -1766,17 +1766,23 @@ static int q6v5_probe(struct platform_device *pdev)
|
|||
qproc->sysmon = qcom_add_sysmon_subdev(rproc, "modem", 0x12);
|
||||
if (IS_ERR(qproc->sysmon)) {
|
||||
ret = PTR_ERR(qproc->sysmon);
|
||||
goto detach_proxy_pds;
|
||||
goto remove_subdevs;
|
||||
}
|
||||
|
||||
ret = rproc_add(rproc);
|
||||
if (ret)
|
||||
goto detach_proxy_pds;
|
||||
goto remove_sysmon_subdev;
|
||||
|
||||
return 0;
|
||||
|
||||
detach_proxy_pds:
|
||||
remove_sysmon_subdev:
|
||||
qcom_remove_sysmon_subdev(qproc->sysmon);
|
||||
remove_subdevs:
|
||||
qcom_remove_ipa_notify_subdev(qproc->rproc, &qproc->ipa_notify_subdev);
|
||||
qcom_remove_ssr_subdev(rproc, &qproc->ssr_subdev);
|
||||
qcom_remove_smd_subdev(rproc, &qproc->smd_subdev);
|
||||
qcom_remove_glink_subdev(rproc, &qproc->glink_subdev);
|
||||
detach_proxy_pds:
|
||||
q6v5_pds_detach(qproc, qproc->proxy_pds, qproc->proxy_pd_count);
|
||||
detach_active_pds:
|
||||
q6v5_pds_detach(qproc, qproc->active_pds, qproc->active_pd_count);
|
||||
|
@ -1789,19 +1795,20 @@ free_rproc:
|
|||
static int q6v5_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct q6v5 *qproc = platform_get_drvdata(pdev);
|
||||
struct rproc *rproc = qproc->rproc;
|
||||
|
||||
rproc_del(qproc->rproc);
|
||||
rproc_del(rproc);
|
||||
|
||||
qcom_remove_sysmon_subdev(qproc->sysmon);
|
||||
qcom_remove_ipa_notify_subdev(qproc->rproc, &qproc->ipa_notify_subdev);
|
||||
qcom_remove_glink_subdev(qproc->rproc, &qproc->glink_subdev);
|
||||
qcom_remove_smd_subdev(qproc->rproc, &qproc->smd_subdev);
|
||||
qcom_remove_ssr_subdev(qproc->rproc, &qproc->ssr_subdev);
|
||||
qcom_remove_ipa_notify_subdev(rproc, &qproc->ipa_notify_subdev);
|
||||
qcom_remove_ssr_subdev(rproc, &qproc->ssr_subdev);
|
||||
qcom_remove_smd_subdev(rproc, &qproc->smd_subdev);
|
||||
qcom_remove_glink_subdev(rproc, &qproc->glink_subdev);
|
||||
|
||||
q6v5_pds_detach(qproc, qproc->active_pds, qproc->active_pd_count);
|
||||
q6v5_pds_detach(qproc, qproc->proxy_pds, qproc->proxy_pd_count);
|
||||
q6v5_pds_detach(qproc, qproc->active_pds, qproc->active_pd_count);
|
||||
|
||||
rproc_free(qproc->rproc);
|
||||
rproc_free(rproc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue