AMD-Xilinx Versal and Versal-NET are successor of ZynqMP platform. ZynqMP remoteproc driver is mostly compatible with new platforms except few platform specific differences. Versal has same IP of cortex-R5 cores hence maintained compatible string same as ZynqMP platform. However, hardcode TCM addresses are not supported for new platforms and must be provided in device-tree as per new bindings. This makes TCM representation data-driven and easy to maintain. This check is provided in the driver. For Versal-NET platform, TCM doesn't need to be configured in lockstep mode or split mode. Hence that call to PMC firmware is avoided in the driver for Versal-NET platform. Signed-off-by: Tanmay Shah <tanmay.shah@xxxxxxx> --- drivers/remoteproc/xlnx_r5_remoteproc.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/remoteproc/xlnx_r5_remoteproc.c b/drivers/remoteproc/xlnx_r5_remoteproc.c index d4a22caebaad..193bc159d1b4 100644 --- a/drivers/remoteproc/xlnx_r5_remoteproc.c +++ b/drivers/remoteproc/xlnx_r5_remoteproc.c @@ -323,9 +323,12 @@ static int zynqmp_r5_set_mode(struct zynqmp_r5_core *r5_core, return ret; } - ret = zynqmp_pm_set_tcm_config(r5_core->pm_domain_id, tcm_mode); - if (ret < 0) - dev_err(r5_core->dev, "failed to configure TCM\n"); + /* TCM configuration is not needed in versal-net */ + if (device_is_compatible(r5_core->dev, "xlnx,zynqmp-r5f")) { + ret = zynqmp_pm_set_tcm_config(r5_core->pm_domain_id, tcm_mode); + if (ret < 0) + dev_err(r5_core->dev, "failed to configure TCM\n"); + } return ret; } @@ -933,10 +936,17 @@ static int zynqmp_r5_core_init(struct zynqmp_r5_cluster *cluster, int ret, i; r5_core = cluster->r5_cores[0]; + + /* + * New platforms must use device tree for TCM parsing. + * Only ZynqMP uses hardcode TCM. + */ if (of_find_property(r5_core->np, "reg", NULL)) ret = zynqmp_r5_get_tcm_node_from_dt(cluster); - else + else if (of_machine_is_compatible("xlnx,zynqmp")) ret = zynqmp_r5_get_tcm_node(cluster); + else + ret = -EINVAL; if (ret) { dev_err(dev, "can't get tcm, err %d\n", ret); @@ -1198,6 +1208,7 @@ static int zynqmp_r5_remoteproc_probe(struct platform_device *pdev) /* Match table for OF platform binding */ static const struct of_device_id zynqmp_r5_remoteproc_match[] = { { .compatible = "xlnx,zynqmp-r5fss", }, + { .compatible = "xlnx,versal-net-r52fss", }, { /* end of list */ }, }; MODULE_DEVICE_TABLE(of, zynqmp_r5_remoteproc_match); -- 2.25.1